# HG changeset patch # User Jaakko Haukipuro (Nokia-MS/Oulu) # Date 1284635500 -3600 # Node ID c63ee96dbe5f6e3e209f8883e1d3e9f2510dface # Parent 3ab5c078b490b9ebfacfaa41c78bfcfb41ca2752 Missing activityfw and taskswitcher components - fix for Bug 3670 diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/ctc.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/ctc.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,98 @@ +#!/usr/bin/perl +# +# 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: +# + +#USAGE: +# Usage: 101ctc.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; +use Cwd; +use Win32::Job; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + chdir(".."); + + my @testdirs = ( "tsrc\\unittest_activityclient" , + "tsrc\\unittest_activitydatastorage" , + "tsrc\\unittest_activitymanager" , + "tsrc\\unittest_activityserviceplugin" ); + + if (($make eq "instrument") || ($make eq "all")) { + `for /R . %i IN (mon.*) DO del %i`; + system("del profile.txt"); + `for /D %f IN (CTC*) DO rmdir /S /Q %f`; + + system("call qmake -spec symbian-sbsv2"); + system("call sbs reallyclean -c winscw_udeb"); + system("call sbs -j 4 -c winscw_udeb"); + + my $cwd = cwd(); + foreach my $testdir (@testdirs) { + chdir($testdir); + system("call qmake -config coverage"); + system("call bldmake bldfiles"); + system("call abld makefile winscw"); + system("call abld reallyclean winscw"); + system("ctcwrap -i fd -C EXCLUDE+moc_*.cpp,*/tsrc/* -C SOURCE_IDENTIFICATION=absolute abld build winscw udeb"); + chdir($cwd); + } + } + if (($make eq "run") || ($make eq "all")) { + foreach my $testdir (@testdirs) { + my $test = (split m/\\/ , $testdir)[-1]; + print ("Running $test\n"); + if ( run_for("\\epoc32\\release\\winscw\\udeb\\$test.exe", "$test.exe >C:\\testresult_$test.txt", 300) ) { + warn("$test execution timed out."); + } + } + } + if (($make eq "ctcpost") || ($make eq "all")) { + my $coverageData = ""; + + foreach my $testdir (@testdirs) { + if (-e "$testdir\\MON.dat" && -e "$testdir\\MON.sym") { + $coverageData .= "$testdir\\MON.dat "; + } + } + if ( $coverageData ne "" ) { + system("call ctcpost -ff $coverageData -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -T 70 -fd $coverageData -p profile.txt"); + system("call ctc2html -t 70 -nsb -i profile.txt -o CTCDECISION"); + } else { + warn("No coverage data generated."); + } + } +} + +print "END.\n"; + +sub run_for { + my ($cmd, $args, $timeout) = @_; + my $job = Win32::Job->new() or die "Error creating job: $^E"; + my $pid = $job->spawn($cmd, $args, { stdin => 'NUL', stdout => 'NUL', stderr => 'NUL' } ) or die "Error starting job $cmd: $^E"; + $job->run($timeout); + my $stat = $job->status(); + exists($stat->{$pid}) or die "No status for $pid ($cmd)"; + return $stat->{$pid}->{exitcode}; +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/mocks/inc/afstorageclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/mocks/inc/afstorageclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,92 @@ +/* +* 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: +* +*/ + +#ifndef AFSTORAGECLIENT_H +#define AFSTORAGECLIENT_H + +#include + +class CAfEntry; +class MAfAsyncRequestObserver; + +class CAfStorageClient : public CBase +{ +public: + static CAfStorageClient *NewL(MAfAsyncRequestObserver &observer); + virtual ~CAfStorageClient(); + +private: + CAfStorageClient(MAfAsyncRequestObserver &observer); + +public: + int addActivity(const CAfEntry &entry, TInt imageHandle); + int updateActivity(const CAfEntry &entry, TInt imageHandle); + int saveActivity(const CAfEntry &entry, TInt imageHandle); + int removeActivity(const CAfEntry &entry); + int removeApplicationActivities(const CAfEntry &entry); + int activities(RPointerArray &dst); + int applicationActivities(RPointerArray &dst, const CAfEntry &entry); + int activityData(CAfEntry *&dst, const CAfEntry &entry); + int waitActivity(); + int launchActivity(const CAfEntry &entry); + int getThumbnail(const TSize &size, const TDesC &imagePath, void *userData); + int notifyDataChange(); + +private: + MAfAsyncRequestObserver &mObserver; + +private: + void updateLastEntry(const CAfEntry &entry); + +public: + void invokeWaitActivityCallback(int result, const TDesC8 &data); + void invokeGetThumbnailCallback(int result, int bitmapHandle, void *userData); + void invokeDataChangeCallback(int result); + + static void clearLastCallInfo(); + +public: + enum LastMethodCalled { + NoCall, + AddActivityMethod, + UpdateActivityMethod, + SaveActivityMethod, + RemoveActivityMethod, + RemoveApplicationActivitiesMethod, + ActivitiesMethod, + ApplicationActivitiesMethod, + ActivityDataMethod, + WaitActivityMethod, + LaunchActivityMethod, + GetThumbnailMethod, + NotifyDataChangeMethod, + }; + +public: + static TInt constructorError; + static TInt expectedReturnCode; + + static CAfEntry *lastCallEntry; + static TInt lastCallImageHandle; + static TSize lastCallThumbnailSize; + static HBufC *lastCallThumbnailPath; + static void *lastCallUserData; + + static LastMethodCalled lastMethodCalled; +}; + +#endif //AFSTORAGECLIENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/mocks/inc/afstorageproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/mocks/inc/afstorageproxy.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,59 @@ +/* +* 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: +* +*/ + +#ifndef AFSTORAGEPROXY_H +#define AFSTORAGEPROXY_H + +#include +#include +#include + +class AfStorageProxy : public QObject +{ + Q_OBJECT + +public: + AfStorageProxy(QObject *parent = 0); + virtual ~AfStorageProxy(); + +public: + bool addActivity(int applicationId, const QString &activityId, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot); + bool updateActivity(int applicationId, const QString &activityId, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot); + bool saveActivity(int applicationId, const QString &activityId, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot); + bool removeActivity(int applicationId, const QString &activityId); + bool removeApplicationActivities(int applicationId); + bool activities(QList &list); + bool applicationActivities(QStringList &list, int applicationId); + bool activityData(QVariant &data, int applicationId, const QString &activityId); + bool activityMetaData(QVariantHash &metadata, int applicationId, const QString &activityId); + bool waitActivity(); + bool launchActivity(int applicationId, const QString &activityUri); + bool getThumbnail(const QSize &size, const QString &imagePath, void *userData); + bool notifyDataChange(); + +signals: + void activityRequested(const QString &activityUri); + void thumbnailRequested(const QPixmap &thumbnailPixmap, void *userData); + void dataChanged(); + +public: // additional mocked implementation members + void emitActivityRequested(const QString &activityUri); + + QVariantHash mLastCallParams; +}; + +#endif //AFSTORAGEPROXY_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/mocks/inc/applicationlauncher_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/mocks/inc/applicationlauncher_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef APPLICATIONLAUNCHER_P_H +#define APPLICATIONLAUNCHER_P_H + +#include +#include + +class ApplicationLauncherPrivate +{ + +public: + ApplicationLauncherPrivate(); + ~ApplicationLauncherPrivate(); + +public: + static ApplicationLauncherPrivate *instance; + static bool isRunningReturnValue; + +public: + bool isRunning(int applicationId); + void startApplication(int applicationId, const QUrl &uri); + void bringToForeground(int applicationId); + +public: + QList isRunningCalls; + QList startApplicationCalls; + QList bringToForegroundCalls; + +}; + +#endif // APPLICATIONLAUNCHER_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/mocks/src/afstorageclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/mocks/src/afstorageclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,223 @@ +/* +* 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 "afstorageclient.h" + +#include +#include +#include + +TInt CAfStorageClient::constructorError(KErrNone); +TInt CAfStorageClient::expectedReturnCode(KErrNone); + +CAfEntry *CAfStorageClient::lastCallEntry(0); +TInt CAfStorageClient::lastCallImageHandle(0); +TSize CAfStorageClient::lastCallThumbnailSize(0, 0); +HBufC *CAfStorageClient::lastCallThumbnailPath(0); +void *CAfStorageClient::lastCallUserData(0); +CAfStorageClient::LastMethodCalled CAfStorageClient::lastMethodCalled = CAfStorageClient::NoCall; + +CAfStorageClient *CAfStorageClient::NewL(MAfAsyncRequestObserver &observer) +{ + User::LeaveIfError(CAfStorageClient::constructorError); + return new CAfStorageClient(observer); +} + +CAfStorageClient::~CAfStorageClient() +{ + clearLastCallInfo(); +} + +CAfStorageClient::CAfStorageClient(MAfAsyncRequestObserver &observer) : mObserver(observer) +{ +} + +int CAfStorageClient::addActivity(const CAfEntry &entry, TInt imageHandle) +{ + lastMethodCalled = CAfStorageClient::AddActivityMethod; + updateLastEntry(entry); + lastCallImageHandle = imageHandle; + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::updateActivity(const CAfEntry &entry, TInt imageHandle) +{ + lastMethodCalled = CAfStorageClient::UpdateActivityMethod; + updateLastEntry(entry); + lastCallImageHandle = imageHandle; + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::saveActivity(const CAfEntry &entry, TInt imageHandle) +{ + lastMethodCalled = CAfStorageClient::SaveActivityMethod; + updateLastEntry(entry); + lastCallImageHandle = imageHandle; + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::removeActivity(const CAfEntry &entry) +{ + lastMethodCalled = CAfStorageClient::RemoveActivityMethod; + updateLastEntry(entry); + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::removeApplicationActivities(const CAfEntry &entry) +{ + lastMethodCalled = CAfStorageClient::RemoveApplicationActivitiesMethod; + updateLastEntry(entry); + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::activities(RPointerArray &dst) +{ + if (lastMethodCalled == CAfStorageClient::SaveActivityMethod && CAfStorageClient::lastCallEntry) { + dst.Append(CAfStorageClient::lastCallEntry); + CAfStorageClient::lastCallEntry =0; + } + lastMethodCalled = CAfStorageClient::ActivitiesMethod; + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::applicationActivities(RPointerArray &dst, const CAfEntry &entry) +{ + if (lastMethodCalled == CAfStorageClient::SaveActivityMethod && CAfStorageClient::lastCallEntry) { + dst.Append(CAfStorageClient::lastCallEntry); + CAfStorageClient::lastCallEntry =0; + } + lastMethodCalled = CAfStorageClient::ApplicationActivitiesMethod; + updateLastEntry(entry); + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::activityData(CAfEntry *&dst, const CAfEntry &entry) +{ + if (lastMethodCalled == CAfStorageClient::SaveActivityMethod && CAfStorageClient::lastCallEntry) { + dst =CAfStorageClient::lastCallEntry; + CAfStorageClient::lastCallEntry =0; + } + lastMethodCalled = CAfStorageClient::ActivityDataMethod; + // @todo return something in dst + updateLastEntry(entry); + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::waitActivity() +{ + if(lastMethodCalled == CAfStorageClient::NoCall) { + lastMethodCalled = CAfStorageClient::WaitActivityMethod; + mObserver.waitActivityRequestCompleted(CAfStorageClient::expectedReturnCode, KNullDesC8); + } + + lastMethodCalled = CAfStorageClient::WaitActivityMethod; + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::launchActivity(const CAfEntry &entry) +{ + lastMethodCalled = CAfStorageClient::LaunchActivityMethod; + updateLastEntry(entry); + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::getThumbnail(const TSize &size, const TDesC &imagePath, void *userData) +{ + lastMethodCalled = CAfStorageClient::GetThumbnailMethod; + lastCallThumbnailSize = size; + delete lastCallThumbnailPath; + lastCallThumbnailPath = imagePath.Alloc(); + lastCallUserData = userData; + int result = KErrNone; + if(size.iHeight <=0 || size.iWidth <= 0 ){ + mObserver.getThumbnailRequestCompleted(KErrArgument, -1, userData); + } else { + CFbsBitmap *bitmap = new (ELeave)CFbsBitmap(); + CleanupStack::PushL(bitmap); + User::LeaveIfError(bitmap->Create(size, EColor4K)); + mObserver.getThumbnailRequestCompleted(CAfStorageClient::expectedReturnCode, bitmap->Handle(), userData); + CleanupStack::PopAndDestroy(bitmap); + } + + return CAfStorageClient::expectedReturnCode; +} + +int CAfStorageClient::notifyDataChange() +{ + if(lastMethodCalled == CAfStorageClient::NoCall) { + lastMethodCalled = CAfStorageClient::NotifyDataChangeMethod; + mObserver.dataChangeNotificationCompleted(CAfStorageClient::expectedReturnCode); + } + lastMethodCalled = CAfStorageClient::NotifyDataChangeMethod; + return CAfStorageClient::expectedReturnCode; +} + +// --------------------------------------------------------------------------- +// Invoking callbacks +// --------------------------------------------------------------------------- +// +void CAfStorageClient::invokeWaitActivityCallback(int result, const TDesC8 &data) +{ + mObserver.waitActivityRequestCompleted(result, data); +} + +void CAfStorageClient::invokeGetThumbnailCallback(int result, int bitmapHandle, void *userData) +{ + mObserver.getThumbnailRequestCompleted(result, bitmapHandle, userData); +} + +void CAfStorageClient::invokeDataChangeCallback(int result) +{ + mObserver.dataChangeNotificationCompleted(result); +} + +// --------------------------------------------------------------------------- +// Helper methods +// --------------------------------------------------------------------------- +// +void CAfStorageClient::clearLastCallInfo() +{ + CAfStorageClient::constructorError = EFalse; + CAfStorageClient::expectedReturnCode = KErrNone; + + delete CAfStorageClient::lastCallEntry; + CAfStorageClient::lastCallEntry = 0; + + CAfStorageClient::lastCallImageHandle = 0; + CAfStorageClient::lastCallThumbnailSize = TSize(0,0); + + delete CAfStorageClient::lastCallThumbnailPath; + CAfStorageClient::lastCallThumbnailPath = 0; + + CAfStorageClient::lastCallUserData = 0; + + lastMethodCalled = CAfStorageClient::NoCall; +} + +void CAfStorageClient::updateLastEntry(const CAfEntry &entry) +{ + delete CAfStorageClient::lastCallEntry; + + CAfStorageClient::lastCallEntry = CAfEntry::NewL( + entry.Flags(), + entry.ApplicationId(), + entry.ActivityId(), + entry.ImageSrc(), + entry.Data(CAfEntry::Private), + entry.Data(CAfEntry::Public) + ); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/mocks/src/afstorageproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/mocks/src/afstorageproxy.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,148 @@ +/* +* 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 "afstorageproxy.h" + +#include + +AfStorageProxy::AfStorageProxy(QObject *parent) : QObject(parent) +{ +} + +AfStorageProxy::~AfStorageProxy() +{ +} + +bool AfStorageProxy::addActivity(int applicationId, const QString &activityId, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot) +{ + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityId", activityId); + mLastCallParams.insert("activityData", activityData); + mLastCallParams.insert("metadata", metadata); + mLastCallParams.insert("screenshot", QVariant::fromValue(screenshot)); + return true; +} + +bool AfStorageProxy::updateActivity(int applicationId, const QString &activityId, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot) +{ + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityId", activityId); + mLastCallParams.insert("activityData", activityData); + mLastCallParams.insert("metadata", metadata); + mLastCallParams.insert("screenshot", QVariant::fromValue(screenshot)); + return true; +} + +bool AfStorageProxy::saveActivity(int applicationId, const QString &activityId, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot) +{ + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityId", activityId); + mLastCallParams.insert("activityData", activityData); + mLastCallParams.insert("metadata", metadata); + mLastCallParams.insert("screenshot", QVariant::fromValue(screenshot)); + return true; +} + +bool AfStorageProxy::removeActivity(int applicationId, const QString &activityId) +{ + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityId", activityId); + return true; +} + +bool AfStorageProxy::removeApplicationActivities(int applicationId) +{ + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + return true; +} + +bool AfStorageProxy::activities(QList &list) +{ + Q_UNUSED(list); + mLastCallParams.clear(); + return true; +} + +bool AfStorageProxy::applicationActivities(QStringList &list, int applicationId) +{ + Q_UNUSED(list); + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + return true; +} + +bool AfStorageProxy::activityData(QVariant &data, int applicationId, const QString &activityId) +{ + Q_UNUSED(data); + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityId", activityId); + return true; +} + +bool AfStorageProxy::activityMetaData(QVariantHash &metadata, int applicationId, const QString &activityId) +{ + Q_UNUSED(metadata); + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityId", activityId); + return true; +} + +bool AfStorageProxy::waitActivity() +{ + mLastCallParams.clear(); + return true; +} + +bool AfStorageProxy::launchActivity(int applicationId, const QString &activityUri) +{ + mLastCallParams.clear(); + mLastCallParams.insert("applicationId", applicationId); + mLastCallParams.insert("activityUri", activityUri); + return true; +} + +bool AfStorageProxy::getThumbnail(const QSize &size, const QString &imagePath, void *userData) +{ + mLastCallParams.clear(); + mLastCallParams.insert("size", size); + mLastCallParams.insert("imagePath", imagePath); + mLastCallParams.insert("userData", (uint)(userData)); + emit thumbnailRequested(QPixmap(), userData); + return true; +} + +bool AfStorageProxy::notifyDataChange() +{ + mLastCallParams.clear(); + return true; +} + +// --------------------------------------------------------------------------- +// Mock implementation +// --------------------------------------------------------------------------- +// +void AfStorageProxy::emitActivityRequested(const QString &activityId) +{ + emit activityRequested(activityId); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/mocks/src/applicationlauncher_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/mocks/src/applicationlauncher_p.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,59 @@ +/* +* 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 "applicationlauncher_p.h" +#include + +ApplicationLauncherPrivate *ApplicationLauncherPrivate::instance = NULL; +bool ApplicationLauncherPrivate::isRunningReturnValue = false; + +ApplicationLauncherPrivate::ApplicationLauncherPrivate() +{ + if (instance) { + delete instance; + } + instance = this; +} + +ApplicationLauncherPrivate::~ApplicationLauncherPrivate() +{ + // create copy so we can check output even when original object is deleted + instance = new ApplicationLauncherPrivate(*this); +} + +bool ApplicationLauncherPrivate::isRunning(int applicationId) +{ + QVariantHash call; + call.insert("applicationId", applicationId); + isRunningCalls.append(call); + + return isRunningReturnValue; +} + +void ApplicationLauncherPrivate::startApplication(int applicationId, const QUrl &uri) +{ + QVariantHash call; + call.insert("applicationId", applicationId); + call.insert("uri", uri); + startApplicationCalls.append(call); +} + +void ApplicationLauncherPrivate::bringToForeground(int applicationId) +{ + QVariantHash call; + call.insert("applicationId", applicationId); + bringToForegroundCalls.append(call); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afactivation/inc/t_afactivation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afactivation/inc/t_afactivation.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +/* +* 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: +* +*/ +#ifndef TESTAFACTIVATION_H +#define TESTAFACTIVATION_H + +#include +#include + +#include "afstorageproxy.h" +class AfActivationPrivate; + +class TestAfActivation : public QObject +{ + Q_OBJECT + +public: + TestAfActivation(); + +private slots: + void init(); + void cleanup(); + + void invokeActivationPublicInterface(); + + void testDefaultValuesAfterCreation(); + void testSignalIsEmittedWhenActivityIsRequested(); + void testValuesChangeWhenActivityIsRequested(); + void testChangingActivityInBackground(); + +private: + QSharedPointer mServiceProvider; + AfActivationPrivate *mActivationPrivate; + QString mDefaultActivityName; +}; + +#endif // TESTAFACTIVATION_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afactivation/src/t_afactivation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afactivation/src/t_afactivation.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,106 @@ +/* +* 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_afactivation.h" + +#include + +#include "afactivation.h" +#include "afactivation_p.h" +#include "applicationlauncher_p.h" + +TestAfActivation::TestAfActivation() +{ + mDefaultActivityName = QString("appto://EBADC0DE?%1=TestActivity&TestParam=TestValue").arg(Af::KActivityUriNameKey); +} + +void TestAfActivation::init() +{ + mServiceProvider = QSharedPointer(new AfStorageProxy()); + mActivationPrivate = new AfActivationPrivate(mServiceProvider); +} + +void TestAfActivation::cleanup() +{ + delete mActivationPrivate; + mActivationPrivate = NULL; +} + +void TestAfActivation::invokeActivationPublicInterface() +{ + // AfActivation is only responsible of correct creation of AfActivationPrivate and + // forwarding requests. Since it's impossible to verify the effects of the member + // calls, just invoke the methods. + AfActivation activation; + + activation.parameters(); + activation.reason(); + activation.name(); +} + +void TestAfActivation::testDefaultValuesAfterCreation() +{ + QCOMPARE(mActivationPrivate->parameters(), QVariantHash()); + QCOMPARE(mActivationPrivate->reason(), Af::ActivationReasonNormal); + QCOMPARE(mActivationPrivate->name(), QString()); +} + +void TestAfActivation::testSignalIsEmittedWhenActivityIsRequested() +{ + QSignalSpy activatedSpy(mActivationPrivate, SIGNAL(activated(Af::ActivationReason,QString,QVariantHash))); + QVERIFY(activatedSpy.isValid()); + + mServiceProvider->emitActivityRequested(mDefaultActivityName); + QCOMPARE(activatedSpy.count(), 1); +} + +void TestAfActivation::testValuesChangeWhenActivityIsRequested() +{ + QSignalSpy activatedSpy(mActivationPrivate, SIGNAL(activated(Af::ActivationReason,QString,QVariantHash))); + QVERIFY(activatedSpy.isValid()); + + mServiceProvider->emitActivityRequested(mDefaultActivityName); + QCOMPARE(activatedSpy.count(), 1); + + QCOMPARE(mActivationPrivate->reason(), Af::ActivationReasonActivity); + QCOMPARE(mActivationPrivate->name(), QString("TestActivity")); + QVERIFY(mActivationPrivate->parameters().contains("TestParam")); + QCOMPARE(mActivationPrivate->parameters().value("TestParam").toString(), QString("TestValue")); +} + +void TestAfActivation::testChangingActivityInBackground() +{ + // bring to foreground is called by default + { + mServiceProvider->emitActivityRequested(mDefaultActivityName); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); + QCOMPARE(launcher->bringToForegroundCalls.count(), 1); + launcher->bringToForegroundCalls.clear(); + } + + // bring to foreground is not called if background parameter is present + { + mServiceProvider->emitActivityRequested(QString("appto://EBADC0DE?%1=TestActivity&%2=").arg(Af::KActivityUriNameKey).arg(Af::KActivityUriBackgroundKey)); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); + QCOMPARE(launcher->bringToForegroundCalls.count(), 0); + } +} + +QTEST_MAIN(TestAfActivation) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afactivation/t_afactivation.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afactivation/t_afactivation.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +INCLUDEPATH += ./inc \ + ../mocks/inc + +SOURCES += ./src/t_afactivation.cpp +HEADERS += ./inc/t_afactivation.h + +SOURCES += ../../src/aflauncher.cpp \ + ../../src/afactivation.cpp \ + ../../src/afactivation_p.cpp \ + ../../src/afcommandlineparser.cpp \ + ../mocks/src/applicationlauncher_p.cpp \ + ../mocks/src/afstorageproxy.cpp \ + +HEADERS += ../../inc/aflauncher.h \ + ../../../../homescreensrv_plat/activity_framework_api/afactivities_global.h \ + ../../../../homescreensrv_plat/activity_framework_api/afactivation.h \ + ../../inc/afactivation_p.h \ + ../../inc/afcommandlineparser.h \ + ../mocks/inc/applicationlauncher_p.h \ + ../mocks/inc/afstorageproxy.h \ + +include(../tsrc_common.pri) + +symbian:!coverage:CONFIG += symbian_test diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afactivitystorage/inc/t_afactivitystorage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afactivitystorage/inc/t_afactivitystorage.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,45 @@ +/* +* 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: +* +*/ +#ifndef TESTAFACTIVITYSTORAGE_H +#define TESTAFACTIVITYSTORAGE_H + +#include +#include +#include "afstorageproxy.h" +class AfActivityStoragePrivate; + +class TestAfActivityStorage : public QObject +{ + Q_OBJECT + +private slots: + void init(); + void cleanup(); + + void testSaveActivity(); + void testRemoveActivity(); + void testAllActivities(); + void testActivityData(); + void testActivityMetaData(); + +private: + QSharedPointer mServiceProvider; + AfActivityStoragePrivate *mStorage; + +}; + +#endif // TESTAFACTIVITYSTORAGE_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afactivitystorage/src/t_afactivitystorage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afactivitystorage/src/t_afactivitystorage.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,98 @@ +/* +* 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_afactivitystorage.h" + +#include + +#include "afactivitystorage_p.h" + +const char DefaultActivityName [] = "DefaultTestActivityName"; +const char DefaultActivityPrivate [] = "DefaultTestActivityPrivateData"; +const char DefaultActivityPublic [] = "DefaultTestActivityPublicData"; +const char DefaultActivityPublicKey [] = "FakeData"; + +void TestAfActivityStorage::init() +{ + mServiceProvider = QSharedPointer(new AfStorageProxy()); + mStorage = new AfActivityStoragePrivate(mServiceProvider); +} + +void TestAfActivityStorage::cleanup() +{ + delete mStorage; + mStorage = NULL; +} + +void TestAfActivityStorage::testSaveActivity() +{ + const int applicationId(RProcess().SecureId().iId); + QString activityId(DefaultActivityName); + QVariant privateData(DefaultActivityPrivate); + QVariantHash publicData; + publicData.insert(DefaultActivityPublicKey, QVariant(DefaultActivityPublic)); + + mStorage->saveActivity(activityId, privateData, publicData); + + QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString()); + QVERIFY(privateData == mServiceProvider->mLastCallParams.value("activityData")); + QVERIFY(publicData.count() <= mServiceProvider->mLastCallParams.value("metadata").toHash().count()); +} + +void TestAfActivityStorage::testRemoveActivity() +{ + const int applicationId(RProcess().SecureId().iId); + QString activityId(DefaultActivityName); + + mStorage->removeActivity(activityId); + + QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString()); +} + +void TestAfActivityStorage::testAllActivities() +{ + const int applicationId(RProcess().SecureId().iId); + + mStorage->allActivities(); + + QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt()); +} + +void TestAfActivityStorage::testActivityData() +{ + const int applicationId(RProcess().SecureId().iId); + QString activityId(DefaultActivityName); + + mStorage->activityData(activityId); + + QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString()); +} + +void TestAfActivityStorage::testActivityMetaData() +{ + const int applicationId(RProcess().SecureId().iId); + QString activityId(DefaultActivityName); + + mStorage->activityMetaData(activityId); + + QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString()); +} + +QTEST_MAIN(TestAfActivityStorage) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afactivitystorage/t_afactivitystorage.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afactivitystorage/t_afactivitystorage.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +# +# 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: +# + +INCLUDEPATH += ./inc \ + ../mocks/inc + +SOURCES += ./src/t_afactivitystorage.cpp +HEADERS += ./inc/t_afactivitystorage.h + +SOURCES += ../../src/afactivitystorage.cpp \ + ../../src/afactivitystorage_p.cpp \ + ../mocks/src/afstorageproxy.cpp \ + +HEADERS += ../../../../homescreensrv_plat/activity_framework_api/afactivities_global.h \ + ../../../../homescreensrv_plat/activity_framework_api/afactivitystorage.h \ + ../../inc/afactivitystorage_p.h \ + ../mocks/inc/afstorageproxy.h \ + +include(../tsrc_common.pri) + +symbian:!coverage: CONFIG += symbian_test diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afstorageproxy/inc/t_afstorageproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afstorageproxy/inc/t_afstorageproxy.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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: +* +*/ +#ifndef TESTAFSTORAGEPROXY_H +#define TESTAFSTORAGEPROXY_H + +#include +#include + +class AfStorageProxy; + +class TestAfStorageProxy : public QObject +{ + Q_OBJECT + +private slots: + void init(); + void cleanup(); + +// void testConstructorThrowsWhenStorageConstructionLeaves(); +// void testMethodsReturnFalseInCaseOfErrorsInStorage(); + + void testSaveActivityDataSerialization(); + void testSaveActivityFlags(); + void testSaveActivityScreenshotHandle(); + + void testDeprecatedAddAndUpdateMethods(); + + void testRemoveActivity(); + void testRemoveApplicationActivities(); + void testWaitActivity(); + void testLaunchActivity(); + void testGetThumbnail(); + void testNotifyDataChange(); + void testActivities(); + void testApplicationActivities(); + void testActivityData(); + void testActivityMetaData(); + +private: + QPixmap generateNonNullScreenshot(); + +private: + AfStorageProxy *mProxy; +}; + +#endif // TESTAFSTORAGEPROXY_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afstorageproxy/src/t_afstorageproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afstorageproxy/src/t_afstorageproxy.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,327 @@ +/* +* 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_afstorageproxy.h" + +#include +#include +#include + +#include +#include + +#include "afstorageclient.h" +#include "afstorageproxy.h" +#include "afserializer.h" + +namespace { + const int KApplicationId = 42; + + const char KActivityId[] = "TestActivity"; + const char KImagePath[] = "SomeFakePath"; +} + +void TestAfStorageProxy::init() +{ + mProxy = new AfStorageProxy(); +} + +void TestAfStorageProxy::cleanup() +{ + delete mProxy; + mProxy = NULL; +} + +void TestAfStorageProxy::testSaveActivityDataSerialization() +{ + // check that data and metadata are properly serialized + QVariant data("Data"); + QVariantHash metaData; + QString someKey("SomeKey"); + QVariant someValue("SomeValue"); + metaData.insert(someKey, someValue); + + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->saveActivity(KApplicationId, KActivityId, data, metaData, QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + + QVariantHash deserializedMetaData; + deserializedMetaData << entry->Data(CAfEntry::Public); + QVERIFY(deserializedMetaData.contains(someKey)); + QCOMPARE(deserializedMetaData.value(someKey), someValue); + + QVariantHash deserializedData; + deserializedData << entry->Data(CAfEntry::Private); + QVERIFY(deserializedData.contains(ActivityDataKeyword)); + QCOMPARE(deserializedData.value(ActivityDataKeyword), data); +} + +void TestAfStorageProxy::testSaveActivityFlags() +{ + // test that activities are visible and non-persistent by default + { + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + + QVERIFY(!(entry->Flags() & CAfEntry::Persistent)); + QVERIFY(!(entry->Flags() & CAfEntry::Invisible)); + CAfStorageClient::clearLastCallInfo(); + } + + // test persistency flag is properly set + { + QVariantHash metaData; + metaData.insert(ActivityPersistence, true); + + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), metaData, QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + + QVERIFY(entry->Flags() & CAfEntry::Persistent); + CAfStorageClient::clearLastCallInfo(); + } + + // test visibility flag is properly set + { + QVariantHash metaData; + metaData.insert(ActivityVisibility, false); + + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), metaData, QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + + QVERIFY(entry->Flags() & CAfEntry::Invisible); + CAfStorageClient::clearLastCallInfo(); + } +} + +void TestAfStorageProxy::testSaveActivityScreenshotHandle() +{ + // in case of null pixmap -1 handle will be sent to server + { + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod); + + QCOMPARE(CAfStorageClient::lastCallImageHandle, -1); + CAfStorageClient::clearLastCallInfo(); + } + + // proper handle is sent for non-null pixmap + { + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod); + + QVERIFY(CAfStorageClient::lastCallImageHandle != -1); + CAfStorageClient::clearLastCallInfo(); + } +} + +void TestAfStorageProxy::testDeprecatedAddAndUpdateMethods() +{ + // we don't test those methods thoroughly, because a) it's basically the + // same code as saveActivity b) those methods are deprecated and will be + // removed soon. + + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + + mProxy->addActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::AddActivityMethod); + mProxy->addActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot()); + + mProxy->updateActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap()); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::UpdateActivityMethod); + mProxy->updateActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot()); +} + +void TestAfStorageProxy::testRemoveActivity() +{ + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->removeActivity(KApplicationId, KActivityId); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::RemoveActivityMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + QCOMPARE(entry->ApplicationId(), KApplicationId); + QScopedPointer activityIdAsDesc(XQConversions::qStringToS60Desc(QString(KActivityId))); + QVERIFY(entry->ActivityId().Compare(*activityIdAsDesc.data()) == 0); +} + +void TestAfStorageProxy::testRemoveApplicationActivities() +{ + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->removeApplicationActivities(KApplicationId); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::RemoveApplicationActivitiesMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + QCOMPARE(entry->ApplicationId(), KApplicationId); +} + +void TestAfStorageProxy::testWaitActivity() +{ + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + + CAfStorageClient::expectedReturnCode = KErrCancel; + mProxy->waitActivity(); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::WaitActivityMethod); + + CAfStorageClient::lastMethodCalled = CAfStorageClient::NoCall; + CAfStorageClient::expectedReturnCode = KErrNone; + mProxy->waitActivity(); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::WaitActivityMethod); +} + +void TestAfStorageProxy::testLaunchActivity() +{ + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + mProxy->launchActivity(KApplicationId, KActivityId); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::LaunchActivityMethod); + + CAfEntry *entry = CAfStorageClient::lastCallEntry; + QVERIFY(entry); + QCOMPARE(entry->ApplicationId(), KApplicationId); + QScopedPointer activityIdAsDesc(XQConversions::qStringToS60Desc(QString(KActivityId))); + QVERIFY(entry->ActivityId().Compare(*activityIdAsDesc.data()) == 0); +} + +void TestAfStorageProxy::testGetThumbnail() +{ + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + + CAfStorageClient::expectedReturnCode = KErrNone; + mProxy->getThumbnail(QSize(100, 50), QString(KImagePath), this); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::GetThumbnailMethod); + QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iWidth, 100); + QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iHeight, 50); + QScopedPointer pathAsDesc(XQConversions::qStringToS60Desc(QString(KImagePath))); + QVERIFY(CAfStorageClient::lastCallThumbnailPath->Compare(*pathAsDesc.data()) == 0); + QVERIFY(CAfStorageClient::lastCallUserData == this); + + CAfStorageClient::expectedReturnCode = KErrNone; + mProxy->getThumbnail(QSize(0, 0), QString(KImagePath), this); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::GetThumbnailMethod); + QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iWidth, 0); + QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iHeight,0); + QVERIFY(CAfStorageClient::lastCallThumbnailPath->Compare(*pathAsDesc.data()) == 0); + QVERIFY(CAfStorageClient::lastCallUserData == this); + + CAfStorageClient::expectedReturnCode = KErrAccessDenied; + mProxy->getThumbnail(QSize(100, 50), QString(KImagePath), this); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::GetThumbnailMethod); + QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iWidth, 100); + QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iHeight,50); + QVERIFY(CAfStorageClient::lastCallThumbnailPath->Compare(*pathAsDesc.data()) == 0); + QVERIFY(CAfStorageClient::lastCallUserData == this); + +} + +void TestAfStorageProxy::testNotifyDataChange() +{ + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall); + + CAfStorageClient::expectedReturnCode = KErrCancel; + mProxy->notifyDataChange(); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NotifyDataChangeMethod); + + CAfStorageClient::lastMethodCalled = CAfStorageClient::NoCall; + CAfStorageClient::expectedReturnCode = KErrNone; + mProxy->notifyDataChange(); + QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NotifyDataChangeMethod); +} + +// --------------------------------------------------------------------------- +void TestAfStorageProxy::testActivities() +{ + mProxy->removeApplicationActivities(KApplicationId); + + QList< QVariantHash > result; + QVERIFY(mProxy->activities(result)); + QVERIFY(result.count() >= 0); + + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot()); + QVERIFY(mProxy->activities(result)); + QVERIFY(result.count() > 0); +} + +// --------------------------------------------------------------------------- +void TestAfStorageProxy::testApplicationActivities() +{ + mProxy->removeApplicationActivities(KApplicationId); + + QStringList result; + QVERIFY(mProxy->applicationActivities(result, KApplicationId)); + QCOMPARE(result.count(), 0); + + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot()); + QVERIFY(mProxy->applicationActivities(result, KApplicationId)); + QCOMPARE(result.count(), 1); +} + +// --------------------------------------------------------------------------- +void TestAfStorageProxy::testActivityData() +{ + mProxy->removeApplicationActivities(KApplicationId); + + QVariant result; + QVERIFY(!mProxy->activityData(result, KApplicationId, KActivityId)); + + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(KApplicationId), QVariantHash(), generateNonNullScreenshot()); + QVERIFY(mProxy->activityData(result, KApplicationId, KActivityId)); + QCOMPARE(result, QVariant(KApplicationId)); +} + +void TestAfStorageProxy::testActivityMetaData() +{ + QVariantHash result; + QVERIFY(!mProxy->activityMetaData(result, KApplicationId, KActivityId)); + + mProxy->saveActivity(KApplicationId, KActivityId, QVariant(KApplicationId), QVariantHash(), generateNonNullScreenshot()); + QVERIFY(mProxy->activityMetaData(result, KApplicationId, KActivityId)); +} + +// --------------------------------------------------------------------------- +// helper methods +// --------------------------------------------------------------------------- +// +QPixmap TestAfStorageProxy::generateNonNullScreenshot() +{ + QPixmap screenshot(10, 10); + { + QPainter painter(&screenshot); + painter.setBrush(Qt::black); + painter.drawRect(screenshot.rect()); + painter.setBrush(QColor::fromHsv(0, 255, 255)); + painter.drawEllipse(screenshot.rect()); + } + return screenshot; +} + +QTEST_MAIN(TestAfStorageProxy) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/t_afstorageproxy/t_afstorageproxy.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/t_afstorageproxy/t_afstorageproxy.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +# NOTE: the order of those directories is important +INCLUDEPATH += ./inc \ + ../../inc \ # use afstorageproxy.h from actual soruces, not mocks + ../mocks/inc \ # use afstorageclient.h from mocks, not the one exported by afstorageclient.dll + ../../../inc \ # use afasyncrequestobserver.h exported by afstorageclient.dll + +SOURCES += ./src/t_afstorageproxy.cpp +HEADERS += ./inc/t_afstorageproxy.h + +SOURCES += ../../src/afstorageproxy.cpp \ + ../../s60/src/afstorageproxy_p.cpp \ + ../../s60/src/afserializer.cpp \ + ../mocks/src/afstorageclient.cpp \ + +HEADERS += ../../inc/afstorageproxy.h \ + ../../s60/inc/afstorageproxy_p.h \ + ../../s60/inc/afserializer.h \ + ../mocks/inc/afstorageclient.h \ + +include(../tsrc_common.pri) + +LIBS += -lxqutils \ + -lafstoragecommon.lib \ + -lfbscli \ + -lestor \ + +symbian:!coverage:CONFIG += symbian_test diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +# +# 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: +# + +TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS += unittest_activityserviceplugin +SUBDIRS += unittest_activitymanager +SUBDIRS += unittest_activityclient +SUBDIRS += unittest_commandlineparser +SUBDIRS += t_afactivation +SUBDIRS += t_afactivitystorage +SUBDIRS += t_afstorageproxy + +symbian { + SUBDIRS += ../../../internal/tsapps/testapp + SUBDIRS += ../../../internal/tstestutils + SUBDIRS += unittest_applicationluncher +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/tsrc_common.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/tsrc_common.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +# +# 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(../activityserviceplugin.pri) + +CONFIG += qtestlib console + +INCLUDEPATH *= $$PWD/../inc +DEPENDPATH *= $$PWD/../inc + +DEFINES += AFACTIVITIES_TEST diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityclient/inc/unittest_activityclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityclient/inc/unittest_activityclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,27 @@ +/* +* 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 + +class TestActivityClient : public QObject +{ + Q_OBJECT + +private slots: + void testAllMethods(); + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityclient/src/unittest_activityclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityclient/src/unittest_activityclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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 "unittest_activityclient.h" + +#include +#include + +#include "afclient.h" +#include "afactivitystorage.h" +#include "afactivation.h" + +const char DefaultActivityName [] = "DefaultTestActivityName"; +const char DefaultActivityPrivate [] = "DefaultTestActivityPrivateData"; +const char DefaultActivityPublic [] = "DefaultTestActivityPublicData"; +const char DefaultActivityPublicKey [] = "FakeData"; + +void TestActivityClient::testAllMethods() +{ + // prepare test data + RProcess process; + const int applicationId(process.SecureId().iId); + QString activityId(DefaultActivityName); + QVariant privateData(DefaultActivityPrivate); + QVariantHash publicData; + publicData.insert(DefaultActivityPublicKey, QVariant(DefaultActivityPublic)); + + // create object under test + AfClient *mClient = new AfClient(QSharedPointer(new AfActivityStorage()), QSharedPointer(new AfActivation())); + + // invoke all methods + mClient->addActivity(activityId, privateData, publicData); + mClient->updateActivity(activityId, privateData, publicData); + mClient->removeActivity(activityId); + mClient->activities(); + mClient->activityData(activityId); + + delete mClient; +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityclient/src/unittest_main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityclient/src/unittest_main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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 +#include +#include "unittest_activityclient.h" + +Q_DECLARE_METATYPE(QVariant) +int main(int argc, char *argv[]) +{ + qRegisterMetaType("QVariant"); + QApplication app(argc, argv); + + TestActivityClient tc; + return QTest::qExec(&tc, argc, argv); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityclient/unittest_activityclient.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityclient/unittest_activityclient.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,54 @@ +# +# 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: +# + +INCLUDEPATH += ./inc \ + ../mocks/inc \ + +SOURCES += ./src/unittest_activityclient.cpp \ + ./src/unittest_main.cpp \ + +HEADERS += ./inc/unittest_activityclient.h \ + +SOURCES += ../../src/afclient.cpp \ + ../../src/aflauncher.cpp \ + ../../src/afactivitystorage.cpp \ + ../../src/afactivitystorage_p.cpp \ + ../../src/afactivation.cpp \ + ../../src/afactivation_p.cpp \ + ../../src/afcommandlineparser.cpp \ + ../mocks/src/applicationlauncher_p.cpp \ + ../mocks/src/afstorageproxy.cpp \ + +HEADERS += ../../inc/afclient.h \ + ../../inc/aflauncher.h \ + ../../../../homescreensrv_plat/activity_framework_api/afactivities_global.h \ + ../../../../homescreensrv_plat/activity_framework_api/afactivitystorage.h \ + ../../inc/afactivitystorage_p.h \ + ../../../../homescreensrv_plat/activity_framework_api/afactivation.h \ + ../../inc/afactivation_p.h \ + ../../inc/afcommandlineparser.h \ + ../mocks/inc/applicationlauncher_p.h \ + ../mocks/inc/afstorageproxy.h \ + +include(../tsrc_common.pri) + +DEFINES += ACTIVITY_LIB + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + LIBS += -lthumbnailmanagerqt +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activitymanager/inc/unittest_activitymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activitymanager/inc/unittest_activitymanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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 +#include + +#include "afstorageproxy.h" +class AfManager; + +class TestActivityManager : public QObject +{ + Q_OBJECT + +private slots: + void init(); + void cleanup(); + + void testActivityList(); + void testLaunchStartupCaseWithoutUri(); + void testLaunchRunningCaseWithoutUri(); + void testLaunchStartupCaseUsingUris(); + void testLaunchRunningCaseUsingUris(); + void testLaunchRequestsWithInvalidUris(); + void testStartApplicationWithoutActivity(); + void testSwitchApplicationToForegroundWithoutActivity(); + void testGetThumbnail(); + void testUriWithTestRangeUid(); + +private: + QSharedPointer mServiceProvider; + AfManager *mManager; + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activitymanager/src/unittest_activitymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activitymanager/src/unittest_activitymanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,183 @@ +/* +* 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 "unittest_activitymanager.h" + +#include +#include +#include + +#include "afactivities_global.h" +#include "applicationlauncher_p.h" +#include "afmanager.h" + +const char DefaultActivityName [] = "DefaultTestActivityName"; + +void TestActivityManager::init() +{ + mServiceProvider = QSharedPointer(new AfStorageProxy()); + mManager = new AfManager(mServiceProvider); +} + +void TestActivityManager::cleanup() +{ + delete mManager; + mManager = NULL; +} + + +void TestActivityManager::testActivityList() +{ + mManager->activitiesList(); +} + +void TestActivityManager::testLaunchStartupCaseWithoutUri() +{ + RProcess process; + const int applicationId(process.SecureId().iId); + QString activityId(DefaultActivityName); + + mManager->launchActivity(applicationId, activityId); + + // verify output + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 1); + QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(applicationId).toUInt()); + QCOMPARE(launcher->startApplicationCalls.first().value("uri").toUrl().queryItemValue(Af::KActivityUriNameKey), activityId); +} + +void TestActivityManager::testLaunchRunningCaseWithoutUri() +{ + ApplicationLauncherPrivate::isRunningReturnValue = true; + RProcess process; + const int applicationId(process.SecureId().iId); + QString activityId(DefaultActivityName); + + mManager->launchActivity(applicationId, activityId); + + QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QCOMPARE(QUrl(mServiceProvider->mLastCallParams.value("activityUri").toString()).queryItemValue(Af::KActivityUriNameKey), activityId); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 0); +} + +void TestActivityManager::testLaunchStartupCaseUsingUris() +{ + ApplicationLauncherPrivate::isRunningReturnValue = false; + + mManager->launchActivity(QUrl(QString("appto://EEEE0000?%1=TestName").arg(Af::KActivityUriNameKey))); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 1); + QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(0xEEEE0000).toUInt()); + QCOMPARE(launcher->startApplicationCalls.first().value("uri").toUrl().queryItemValue(Af::KActivityUriNameKey), QString("TestName")); +} + +void TestActivityManager::testLaunchRunningCaseUsingUris() +{ + ApplicationLauncherPrivate::isRunningReturnValue = true; + + mManager->launchActivity(QUrl(QString("appto://EEEE0000?%1=TestName").arg(Af::KActivityUriNameKey))); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 0); + + QVERIFY(0xEEEE0000 == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QCOMPARE(QUrl(mServiceProvider->mLastCallParams.value("activityUri").toString()).queryItemValue(Af::KActivityUriNameKey), QString("TestName")); +} + +void TestActivityManager::testLaunchRequestsWithInvalidUris() +{ + // neither of the launchActivity() calls in this test should succeed, so the ActivityLauncher mock + // won't be created and we can expect that ApplicationLauncherPrivate::instance will return the + // same object through entire test. + ApplicationLauncherPrivate *expectedLauncherInstance = ApplicationLauncherPrivate::instance; + + mManager->launchActivity(QUrl()); + QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance); + + mManager->launchActivity(QUrl("arrr://DEADDEAD?pirates=yes")); + QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance); + + mManager->launchActivity(QUrl("appto://kaboom")); + QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance); + + mManager->launchActivity(QUrl(QString("appto://?%1=TestName").arg(Af::KActivityUriNameKey))); + QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance); +} + +void TestActivityManager::testStartApplicationWithoutActivity() +{ + ApplicationLauncherPrivate::isRunningReturnValue = false; + + mManager->launchActivity(QUrl("appto://DEADBEEF")); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 1); + QCOMPARE(launcher->bringToForegroundCalls.count(), 0); + + QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(0xDEADBEEF).toUInt()); + QCOMPARE(launcher->startApplicationCalls.first().value("uri").toUrl().queryItems().count(), 0); +} + +void TestActivityManager::testSwitchApplicationToForegroundWithoutActivity() +{ + ApplicationLauncherPrivate::isRunningReturnValue = true; + + mManager->launchActivity(QUrl("appto://DEADBEEF")); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 0); + + QVERIFY(0xDEADBEEF == mServiceProvider->mLastCallParams.value("applicationId").toInt()); + QCOMPARE(QUrl(mServiceProvider->mLastCallParams.value("activityUri").toString()).queryItemValue(Af::KActivityUriNameKey), QString()); +} + +void TestActivityManager::testGetThumbnail() +{ + QSignalSpy spy(mManager, SIGNAL(thumbnailReady(QPixmap, void *))); + QEventLoop loop; + connect(mManager, + SIGNAL(thumbnailReady(QPixmap, void *)), + &loop, + SLOT(quit())); + //mManager->getThumbnail(23459821); + mManager->getThumbnail(QSize(128, 128), "somestring"); + QTimer::singleShot(3000, &loop, SLOT(quit())); + loop.exec(); + QVERIFY(1==spy.count()); +} + +void TestActivityManager::testUriWithTestRangeUid() +{ + ApplicationLauncherPrivate::isRunningReturnValue = false; + + mManager->launchActivity(QUrl(QString("appto://EBADC0DE?%1=TestName").arg(Af::KActivityUriNameKey))); + + ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance; + QVERIFY(launcher); //sanity check + QCOMPARE(launcher->startApplicationCalls.count(), 1); + QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(0xEBADC0DE).toUInt()); +} + +QTEST_MAIN(TestActivityManager) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activitymanager/unittest_activitymanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activitymanager/unittest_activitymanager.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +INCLUDEPATH += ./inc \ + ../mocks/inc + + +SOURCES += ./src/unittest_activitymanager.cpp +HEADERS += ./inc/unittest_activitymanager.h + +SOURCES += ../../src/afmanager.cpp \ + ../../src/aflauncher.cpp \ + ../mocks/src/applicationlauncher_p.cpp \ + ../mocks/src/afstorageproxy.cpp \ + + +HEADERS += ../../inc/afmanager.h \ + ../../inc/aflauncher.h \ + ../mocks/inc/applicationlauncher_p.h \ + ../mocks/inc/afstorageproxy.h \ + +include(../tsrc_common.pri) + +DEFINES += ACTIVITY_LIB + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + LIBS += -lthumbnailmanagerqt +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/inc/unittest_activityserviceplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/inc/unittest_activityserviceplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +/* +* 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 + +#include "afserviceplugin.h" + +class ActivityInterface; + +class TestActivityServicePlugin : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void testActivityClientCreation(); + void testActivityManagerCreation(); + void testInvalidInterfaceCreation(); + void testActivityManagerEmitsDataChangeSignalAfterSavingThroughStorage(); +}; diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/src/unittest_activityserviceplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/src/unittest_activityserviceplugin.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,105 @@ +/* +* 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 "unittest_activityserviceplugin.h" + +#include +#include +#include + +#include + +#include + +#include + +void TestActivityServicePlugin::initTestCase() +{ + QServiceManager manager; + if (!manager.findServices().contains("ActivityService")) { + qDebug() << "ActivityService not found"; + QVERIFY(QFile::exists(":/activityserviceplugin.xml")); + if (!manager.addService(":/activityserviceplugin.xml")) { + QFAIL(qPrintable(QString("Failed to add ActivityService: %1").arg(manager.error()))); + } + QVERIFY(manager.findServices().contains("ActivityService")); + } +} + +void TestActivityServicePlugin::testActivityClientCreation() +{ + QServiceManager manager; + QObject *activityClient = manager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!activityClient) qDebug() << "error:" << manager.error(); + QVERIFY(activityClient); + QCOMPARE(activityClient->metaObject()->className(), "AfClient"); + delete activityClient; +} + +void TestActivityServicePlugin::testActivityManagerCreation() +{ + QServiceManager manager; + QObject *activityManager = manager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!activityManager) qDebug() << "error:" << manager.error(); + QVERIFY(activityManager); + QCOMPARE(activityManager->metaObject()->className(), "AfManager"); + delete activityManager; +} + +void TestActivityServicePlugin::testInvalidInterfaceCreation() +{ + QServiceManager manager; + QObject *invalidInterface = manager.loadInterface("com.nokia.qt.activities.BlahBlahBlah"); + QVERIFY(!invalidInterface); +} + +void TestActivityServicePlugin::testActivityManagerEmitsDataChangeSignalAfterSavingThroughStorage() +{ + QServiceManager manager; + QScopedPointer activityManager(manager.loadInterface("com.nokia.qt.activities.ActivityManager")); + QVERIFY(activityManager.data()); + + QScopedPointer activityStorage(manager.loadInterface("com.nokia.qt.activities.Storage")); + QVERIFY(activityStorage.data()); + + QSignalSpy dataChangedSpy(activityManager.data(), SIGNAL(dataChanged())); + QVERIFY(dataChangedSpy.isValid()); + QCOMPARE(dataChangedSpy.count(), 0); + + { + QPixmap screenshot(128, 128); + screenshot.fill(Qt::red); + QVERIFY(!screenshot.isNull()); + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + + bool invokeResult; + bool saveResult; + invokeResult = QMetaObject::invokeMethod( + activityStorage.data(), + "saveActivity", + Q_RETURN_ARG(bool, saveResult), + Q_ARG(QString, "Test"), + Q_ARG(QVariant, "TestData"), + Q_ARG(QVariantHash, metadata)); + + QVERIFY(invokeResult); + QVERIFY(saveResult); + } + + QVERIFY(dataChangedSpy.count() > 0 || TsTestUtils::waitForSignal(activityManager.data(), SIGNAL(dataChanged()), 1500)); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/src/unittest_main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/src/unittest_main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +/* +* 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 "unittest_activityserviceplugin.h" + +#include +QTEST_MAIN(TestActivityServicePlugin) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/unittest_activityserviceplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/unittest_activityserviceplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +# +# 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(../tsrc_common.pri) + +SOURCES += ./src/unittest_activityserviceplugin.cpp \ + ./src/unittest_main.cpp +HEADERS += ./inc/unittest_activityserviceplugin.h + +RESOURCES += unittest_activityserviceplugin.qrc + +plugin.path = debug +plugin.files = ../../debug/activityserviceplugin.dll +plugin.CONFIG = no_link no_dependencies explicit_dependencies no_build combine ignore_no_exist no_clean +INSTALLS += plugin +build_pass:ALL_DEPS+=install_plugin + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test +} + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/unittest_activityserviceplugin.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin/unittest_activityserviceplugin.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,5 @@ + + + ../../data/afservice.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/inc/unittest_applicationluncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/inc/unittest_applicationluncher.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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 + +#include + +#include + +class AfLauncher; + +class TestApplicationLuncher : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + + void testIsRunning(); + void testStartApp(); + void testbringToForeground(); + + void testLaunchActivity_data(); + void testLaunchActivity(); + + void testGracefulHandlingOfInvalidUid(); + void testGracefulHandlingOfCorruptedApplication(); + +private: + bool sendToBackground(const TUid &uid); + TUid getForegroundAppUid(); + QUrl buildUri(const TUid &uid, const QString &activityName); + +private: + RWsSession mWsSession; + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/src/unittest_applicationluncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/src/unittest_applicationluncher.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,199 @@ +/** 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 "unittest_applicationluncher.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "tstestutils.h" + +#include "afactivities_global.h" +#include "aflauncher.h" + +const TUid KIconApplicationUid = {0xEd0b4e47}; +const TUid KActivityApplicationUid = {0xEBADF00D}; +const TUid KInvalidUid = {0xDEADBEEF}; +const TUid KCorruptedApplicationUid = {0xE5C3B14E}; + +namespace { + const char KIconApplicationName[] = "appwithicon"; +} + +QTM_USE_NAMESPACE + +// --------------------------------------------------------------------------- +// Test cases +// --------------------------------------------------------------------------- +// +void TestApplicationLuncher::initTestCase() +{ + QCOMPARE(mWsSession.Connect(), KErrNone); +} + +void TestApplicationLuncher::cleanupTestCase() +{ + mWsSession.Close(); +} + +void TestApplicationLuncher::testIsRunning() +{ + AfLauncher launcher; + + QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid)); + + quint64 iconAppId; + QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId)); + QVERIFY(launcher.isRunning(KIconApplicationUid.iUid)); + + QVERIFY(TsTestUtils::closeApplication(iconAppId)); + QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid)); +} + +void TestApplicationLuncher::testStartApp() +{ + QSystemSemaphore semaphore("PublishActivityApp"); + AfLauncher launcher; + + QVERIFY(!launcher.isRunning(KActivityApplicationUid.iUid)); + + launcher.startApplication(KActivityApplicationUid.iUid, QString()); + QVERIFY(semaphore.acquire()); + + QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid)); + QVERIFY(!launcher.isRunning(KActivityApplicationUid.iUid)); +} + +void TestApplicationLuncher::testbringToForeground() +{ + AfLauncher launcher; + + quint64 iconAppId; + QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId)); + QVERIFY(launcher.isRunning(KIconApplicationUid.iUid)); + + QVERIFY(sendToBackground(KIconApplicationUid)); + QVERIFY(getForegroundAppUid() != KIconApplicationUid); + QTest::qWait(3000); // for some reason if there is no timeout, the test application will restart itself after kill + + launcher.bringToForeground(KIconApplicationUid.iUid); + QVERIFY(getForegroundAppUid() == KIconApplicationUid); + QTest::qWait(3000); // for some reason if there is no timeout, the test application will restart itself after kill + + QVERIFY(TsTestUtils::closeApplication(iconAppId)); + QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid)); +} + +// --------------------------------------------------------------- + +void TestApplicationLuncher::testLaunchActivity_data() +{ + QTest::addColumn("activityName"); + + QTest::newRow("normal") << "blahblahblah"; + QTest::newRow("special characters") << "asd $&+,/:;=?@ \"<>#%{}|\\^~[]`asd"; +} + +void TestApplicationLuncher::testLaunchActivity() +{ + QSystemSemaphore semaphore("PublishActivityApp"); + + AfLauncher launcher; + QVERIFY(!launcher.isRunning(KActivityApplicationUid.iUid)); + + QFETCH(QString, activityName); + launcher.startApplication(KActivityApplicationUid.iUid, buildUri(KActivityApplicationUid, activityName)); + semaphore.acquire(); + + QCOMPARE(QValueSpaceSubscriber("/PublishActivityApp/ActivityName").value().toString(), activityName); + + QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid)); + QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid)); +} + +// --------------------------------------------------------------- + +void TestApplicationLuncher::testGracefulHandlingOfInvalidUid() +{ + AfLauncher launcher; + launcher.startApplication(KInvalidUid.iUid, QString()); +} + +void TestApplicationLuncher::testGracefulHandlingOfCorruptedApplication() +{ + AfLauncher launcher; + + // We're going to test Launcher behavior when someone tries to start + // application with missing executable file + launcher.startApplication(KCorruptedApplicationUid.iUid, QString()); +} + +// --------------------------------------------------------------------------- +// Helper methods +// --------------------------------------------------------------------------- +// +QUrl TestApplicationLuncher::buildUri(const TUid &uid, const QString &activityName) +{ + QUrl uri; + uri.setScheme("appto"); + uri.setHost(QString("%1").arg(static_cast(uid.iUid), 8, 16, QChar('0'))); + uri.addQueryItem(Af::KActivityUriNameKey, activityName); + return uri; +} + +bool TestApplicationLuncher::sendToBackground(const TUid &uid) +{ + TApaTaskList taskList(mWsSession); + TApaTask task = taskList.FindApp(uid); + bool taskExists = task.Exists(); + if (taskExists) { + task.SendToBackground(); + } + return taskExists; +} + +TUid TestApplicationLuncher::getForegroundAppUid() +{ + RWsSession wsSession; + // get all window groups + RArray windowGroupList; + CleanupClosePushL(windowGroupList); + User::LeaveIfError(mWsSession.WindowGroupList(0, &windowGroupList)); + + if (windowGroupList.Count() == 0) { + User::Leave(KErrNotFound); + } + + // get uid of first window group + CApaWindowGroupName* windowGroupName = CApaWindowGroupName::NewLC(mWsSession, windowGroupList[0].iId); + TUid foregroundAppUid = windowGroupName->AppUid(); + CleanupStack::PopAndDestroy(windowGroupName); + CleanupStack::PopAndDestroy(&windowGroupList); + + return foregroundAppUid; +} + +QTEST_MAIN(TestApplicationLuncher) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/unittest_applicationluncher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/unittest_applicationluncher.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +# +# 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(../tsrc_common.pri) + +CONFIG *= mobility +MOBILITY *= publishsubscribe + +SOURCES += ./src/unittest_applicationluncher.cpp +HEADERS += ./inc/unittest_applicationluncher.h + +SOURCES += ../../s60/src/applicationlauncher_p.cpp \ + ../../src/aflauncher.cpp \ + +HEADERS += ../../s60/inc/applicationlauncher_p.h \ + ../../inc/aflauncher.h \ + +LIBS += -lxqutils +LIBS += -lws32.dll + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.CAPABILITY = ALL -TCB + + LIBS += -lapgrfx \ # for TApaTaskList + -lapparc \ # for TApaAppInfo + -lcone \ # for CCoeEnv + +} + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/inc/unittest_commandlineparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/inc/unittest_commandlineparser.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +/* +* 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 + +class TestCommandLineParser : public QObject +{ + Q_OBJECT + +private slots: + void testActivityUriParsingAllOk(); + void testActivityUriParsingEmptyActivityName(); + void testActivityUriParsingNoActivityName(); + void testActivityUriParsingNoArgumentAfterMarker(); + void testActivityUriParsingNoMarker(); + void testActivityUriParsingNoUriAfterMarker(); + void testNormalStartParsingEmpty(); + void testNormalStartParsingSomeParameters(); + void testNormalStartParsingOneParameter(); + void testServiceParsing(); + void testServiceParsingEmbedded(); +}; diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/src/unittest_commandlineparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/src/unittest_commandlineparser.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,206 @@ +/* +* 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 "unittest_commandlineparser.h" + +#include +#include +#include +#include + +#include "afactivities_global.h" +#include "afcommandlineparser.h" + +void TestCommandLineParser::testActivityUriParsingAllOk() +{ + QStringList commandLine; + commandLine << "Appname" << "-activity" << QString("appto://DEADBEEF?%1=TestActivity1").arg(Af::KActivityUriNameKey); + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 1); + QVERIFY(activityParams.contains(Af::KActivityUriNameKey)); + QCOMPARE(activityParams.value(Af::KActivityUriNameKey), QVariant("TestActivity1")); + QCOMPARE(name, QString("TestActivity1")); + QCOMPARE(reason, Af::ActivationReasonActivity); +} + +void TestCommandLineParser::testActivityUriParsingEmptyActivityName() +{ + QStringList commandLine; + commandLine << "Appname" << "-activity" << QString("appto://DEADBEEF?%1=&someKey=someValue").arg(Af::KActivityUriNameKey); + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testActivityUriParsingNoActivityName() +{ + QStringList commandLine; + commandLine << "Appname" << "-activity" << "appto://DEADBEEF?someKey=someValue"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testActivityUriParsingNoArgumentAfterMarker() +{ + QStringList commandLine; + commandLine << "Appname" << "-activity"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testActivityUriParsingNoMarker() +{ + QStringList commandLine; + commandLine << "Appname"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testActivityUriParsingNoUriAfterMarker() +{ + QStringList commandLine; + commandLine << "Appname"<< "-activity" << "adsasdasd"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testNormalStartParsingEmpty() +{ + QStringList commandLine; + commandLine << "Appname"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testNormalStartParsingSomeParameters() +{ + QStringList commandLine; + commandLine << "Appname" << "test1" << "test2"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testNormalStartParsingOneParameter() +{ + QStringList commandLine; + commandLine << "Appname" << "test1%&^test2"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 0); + QVERIFY(name.isEmpty()); + QCOMPARE(reason, Af::ActivationReasonNormal); +} + +void TestCommandLineParser::testServiceParsing() +{ + QStringList commandLine; + commandLine << "Appname " << "service=yes" << "intf=IntName" << "oper=Operation"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 2); + QCOMPARE(activityParams.value("oper"), QVariant("Operation")); + QCOMPARE(name, QString("IntName")); + QCOMPARE(reason, Af::ActivationReasonService); +} + +void TestCommandLineParser::testServiceParsingEmbedded() +{ + QStringList commandLine; + commandLine << "Appname " << "embedded=yes" << "service=yes" << "intf=IntName" << "oper=Operation"; + + QVariantHash activityParams = QVariantHash(); + QString name = QString(); + Af::ActivationReason reason = Af::ActivationReasonNormal; + + AfCommandLineParser::parseCommandLine(commandLine, reason, name, activityParams); + + QCOMPARE(activityParams.count(), 3); + QCOMPARE(activityParams.value("oper"), QVariant("Operation")); + QCOMPARE(activityParams.value("embedded"), QVariant(true)); + QCOMPARE(name, QString("IntName")); + QCOMPARE(reason, Af::ActivationReasonService); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/src/unittest_main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/src/unittest_main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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 +#include +#include "unittest_commandlineparser.h" + +Q_DECLARE_METATYPE(QVariant) +int main(int argc, char *argv[]) +{ + qRegisterMetaType("QVariant"); + QApplication app(argc, argv); + + TestCommandLineParser tc; + return QTest::qExec(&tc, argc, argv); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/unittest_commandlineparser.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activityserviceplugin/tsrc/unittest_commandlineparser/unittest_commandlineparser.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +# +# 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: +# + +INCLUDEPATH += ./inc \ + ../../inc \ + ../mocks/inc + + +SOURCES += ./src/unittest_commandlineparser.cpp \ + ./src/unittest_main.cpp +HEADERS += ./inc/unittest_commandlineparser.h + +SOURCES += ../../src/afcommandlineparser.cpp + +HEADERS += ../../../../homescreensrv_plat/activity_framework_api/afactivities_global.h \ + ../../inc/afcommandlineparser.h + +include(../tsrc_common.pri) + +DEFINES += ACTIVITY_LIB + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + LIBS += -lthumbnailmanagerqt +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/afactivitylauncher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/afactivitylauncher.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +TEMPLATE = subdirs +symbian { + BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include \"group/bld.inf\"" + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/bwins/afactivitylauncheru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/bwins/afactivitylauncheru.def Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ +EXPORTS + ?NewLC@CAfActivityLauncher@@SAPAV1@AAVRApaLsSession@@AAVRWsSession@@@Z @ 1 NONAME ; class CAfActivityLauncher * CAfActivityLauncher::NewLC(class RApaLsSession &, class RWsSession &) + ?launchActivityL@CAfActivityLauncherPrivate@@QAEXABVTDesC16@@@Z @ 2 NONAME ; void CAfActivityLauncherPrivate::launchActivityL(class TDesC16 const &) + ?launchActivityL@CAfActivityLauncher@@QAEXABVTDesC16@@@Z @ 3 NONAME ; void CAfActivityLauncher::launchActivityL(class TDesC16 const &) + ?NewL@CAfActivityLauncher@@SAPAV1@AAVRApaLsSession@@AAVRWsSession@@@Z @ 4 NONAME ; class CAfActivityLauncher * CAfActivityLauncher::NewL(class RApaLsSession &, class RWsSession &) + ??1CAfActivityLauncher@@UAE@XZ @ 5 NONAME ; CAfActivityLauncher::~CAfActivityLauncher(void) + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/eabi/afactivitylauncheru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/eabi/afactivitylauncheru.def Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,14 @@ +EXPORTS + _ZN19CAfActivityLauncher15launchActivityLERK7TDesC16 @ 1 NONAME + _ZN19CAfActivityLauncher4NewLER13RApaLsSessionR10RWsSession @ 2 NONAME + _ZN19CAfActivityLauncher5NewLCER13RApaLsSessionR10RWsSession @ 3 NONAME + _ZN19CAfActivityLauncherD0Ev @ 4 NONAME + _ZN19CAfActivityLauncherD1Ev @ 5 NONAME + _ZN19CAfActivityLauncherD2Ev @ 6 NONAME + _ZTI19CAfActivityLauncher @ 7 NONAME + _ZTI26CAfActivityLauncherPrivate @ 8 NONAME + _ZTI8CAfEntry @ 9 NONAME + _ZTV19CAfActivityLauncher @ 10 NONAME + _ZTV26CAfActivityLauncherPrivate @ 11 NONAME + _ZTV8CAfEntry @ 12 NONAME + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/group/afactivitylauncher.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/group/afactivitylauncher.mmp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ + +TARGET afactivitylauncher.dll +TARGETTYPE dll +UID 0x1000008d 0x20026784 +SECUREID 0x20026784 + +CAPABILITY ALL -TCB + + +EPOCHEAPSIZE 0x100000 0x600000 // 1MB - 6MB + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc +SYSTEMINCLUDE ../../inc + +SOURCEPATH ../src +SOURCE afactivitylauncher.cpp +SOURCE afactivitylauncher_p.cpp +SOURCE afapplicationlauncher.cpp + +LIBRARY euser.lib +LIBRARY inetprotutil.lib +LIBRARY apgrfx.lib +LIBRARY cone.lib +LIBRARY apparc.lib +LIBRARY estor.lib +LIBRARY afstorageclient.lib +STATICLIBRARY afstoragecommon.lib + +DEBUGLIBRARY flogger.lib diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/group/bld.inf Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +/* +* 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: +* +*/ +PRJ_PLATFORMS +DEFAULT + +PRJ_MMPFILES +afactivitylauncher.mmp diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/inc/afactivitylauncher_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/inc/afactivitylauncher_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ +#ifndef AFACTIVITYLAUNCHERPRIVATE_H +#define AFACTIVITYLAUNCHERPRIVATE_H + +#include + +#include +#include "afapplicationlauncher.h" + +class CAfStorageClient; + +class CAfActivityLauncherPrivate : public CBase, public MAfAsyncRequestObserver +{ + +public: + static CAfActivityLauncherPrivate *NewL(RApaLsSession &apaLsSession, RWsSession &wsSession); + ~CAfActivityLauncherPrivate(); + +private: + CAfActivityLauncherPrivate(RApaLsSession &apaLsSession, RWsSession &wsSession); + void ConstructL(); + +public: // from MAfAsyncRequestObserver + virtual void waitActivityRequestCompleted(int result, const TDesC8 &data); + virtual void getThumbnailRequestCompleted(int result, int bitmapHandle, void *userData); + virtual void dataChangeNotificationCompleted(int result); + +public: + IMPORT_C void launchActivityL(const TDesC &uriDesc); + +private: + CAfStorageClient *mActivitiesClient; + TAfApplicationLauncher mApplicationLauncher; + +}; + +#endif // AFACTIVITYLAUNCHERPRIVATE_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/inc/afapplicationlauncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/inc/afapplicationlauncher.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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: +* +*/ +#ifndef AFAPPLICATIONLAUNCHER_H +#define AFAPPLICATIONLAUNCHER_H + +#include +#include +#include + +class TAfApplicationLauncher +{ +public: + TAfApplicationLauncher(RApaLsSession &apaLsSession, RWsSession &wsSession); + +public: + TBool isRunning(TUid applicationId); + void startApplicationL(TUid applicationId, const TDesC &uri); + +private: + RApaLsSession &mApaLsSession; + RWsSession &mWsSession; + +}; + +#endif // AFAPPLICATIONLAUNCHER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/src/afactivitylauncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/src/afactivitylauncher.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +/* +* 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 "afactivitylauncher.h" +#include "afactivitylauncher_p.h" + +// ----------------------------------------------------------------------------- +// Public part of construction, destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CAfActivityLauncher *CAfActivityLauncher::NewL(RApaLsSession &apaLsSession, RWsSession &wsSession) +{ + CAfActivityLauncher *self = CAfActivityLauncher::NewLC(apaLsSession, wsSession); + CleanupStack::Pop(self); + return self; +} + +EXPORT_C CAfActivityLauncher *CAfActivityLauncher::NewLC(RApaLsSession &apaLsSession, RWsSession &wsSession) +{ + CAfActivityLauncher *self = new (ELeave) CAfActivityLauncher(); + CleanupStack::PushL(self); + self->ConstructL(apaLsSession, wsSession); + return self; +} + +EXPORT_C CAfActivityLauncher::~CAfActivityLauncher() +{ + delete mImplementation; +} + +// ----------------------------------------------------------------------------- +// Private part of construction +// ----------------------------------------------------------------------------- +// +CAfActivityLauncher::CAfActivityLauncher() +{ +} + +void CAfActivityLauncher::ConstructL(RApaLsSession &apaLsSession, RWsSession &wsSession) +{ + mImplementation = CAfActivityLauncherPrivate::NewL(apaLsSession, wsSession); +} + +// ----------------------------------------------------------------------------- +// Actual activity launching +// ----------------------------------------------------------------------------- +// + +EXPORT_C void CAfActivityLauncher::launchActivityL(const TDesC &uriDesc) +{ + mImplementation->launchActivityL(uriDesc); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/src/afactivitylauncher_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/src/afactivitylauncher_p.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,100 @@ +/* +* 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 "afactivitylauncher_p.h" + +#include +#include + +#include +#include + +// ----------------------------------------------------------------------------- +// Public part of construction, destructor +// ----------------------------------------------------------------------------- +// +CAfActivityLauncherPrivate *CAfActivityLauncherPrivate::NewL(RApaLsSession &apaLsSession, RWsSession &wsSession) +{ + CAfActivityLauncherPrivate *self = new (ELeave)CAfActivityLauncherPrivate(apaLsSession, wsSession); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +CAfActivityLauncherPrivate::~CAfActivityLauncherPrivate() +{ + delete mActivitiesClient; +} + +// ----------------------------------------------------------------------------- +// Private part of construction +// ----------------------------------------------------------------------------- +// +CAfActivityLauncherPrivate::CAfActivityLauncherPrivate(RApaLsSession &apaLsSession, RWsSession &wsSession) : mApplicationLauncher(apaLsSession, wsSession) +{ +} + +void CAfActivityLauncherPrivate::ConstructL() +{ + mActivitiesClient = CAfStorageClient::NewL(*this); +} + +// ----------------------------------------------------------------------------- +// Implementation of MAfAsyncRequestObserver interface. We don't need any +// notifications, but we have to pass an instance of this interface to +// CAfStorageClient constructor. +// ----------------------------------------------------------------------------- +// +void CAfActivityLauncherPrivate::waitActivityRequestCompleted(int /*result*/, const TDesC8 &/*data*/) +{ +} + +void CAfActivityLauncherPrivate::getThumbnailRequestCompleted(int /*result*/, int /*bitmapHandle*/, void */*userData*/) +{ +} + +void CAfActivityLauncherPrivate::dataChangeNotificationCompleted(int /*result*/) +{ +} + +// ----------------------------------------------------------------------------- +// Actual activity launching +// ----------------------------------------------------------------------------- +// + +void CAfActivityLauncherPrivate::launchActivityL(const TDesC &uriDesc) +{ + TUriParser16 parser; + parser.Parse(uriDesc); + + if (parser.Extract(EUriScheme).Compare(_L("appto")) == 0) { + TLex16 uidParser(parser.Extract(EUriHost)); + TUint uid; + User::LeaveIfError(uidParser.Val(uid, EHex)); + + if (mApplicationLauncher.isRunning(TUid::Uid(uid))) { + CAfEntry *launchRequest = CAfEntry::NewLC(0, uid, uriDesc, KNullDesC(), KNullDesC8(), KNullDesC8()); + User::LeaveIfError(mActivitiesClient->launchActivity(*launchRequest)); + CleanupStack::PopAndDestroy(launchRequest); + } else { + mApplicationLauncher.startApplicationL(TUid::Uid(uid), uriDesc); + } + } else { + User::Leave(KErrArgument); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/src/afapplicationlauncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/src/afapplicationlauncher.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,61 @@ +/* +* 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 "afapplicationlauncher.h" + +#include +#include +#include + +// ----------------------------------------------------------------------------- +// Construction +// ----------------------------------------------------------------------------- +// +TAfApplicationLauncher::TAfApplicationLauncher(RApaLsSession &apaLsSession, RWsSession &wsSession) : mApaLsSession(apaLsSession), mWsSession(wsSession) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TAfApplicationLauncher::isRunning(TUid applicationId) +{ + TApaTaskList taskList(mWsSession); + TApaTask task = taskList.FindApp(applicationId); + return task.Exists(); +} + +void TAfApplicationLauncher::startApplicationL(TUid applicationId, const TDesC &uri) +{ + _LIT(KActivityMarker, "-activity "); + RBuf commandLine; + CleanupClosePushL(commandLine); + commandLine.ReAllocL(KActivityMarker().Length() + uri.Length()); + commandLine.Append(KActivityMarker()); + commandLine.Append(uri); + + TApaAppInfo appInfo; + User::LeaveIfError(mApaLsSession.GetAppInfo(appInfo, applicationId)); + + RProcess application; + CleanupClosePushL(application); + User::LeaveIfError(application.Create(appInfo.iFullName, commandLine)); + application.Resume(); + + CleanupStack::PopAndDestroy(&application); + CleanupStack::PopAndDestroy(&commandLine); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/inc/t_afactivitylauncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/inc/t_afactivitylauncher.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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: +* +*/ +#ifndef T_AFACTIVITYLAUNCHER_H +#define T_AFACTIVITYLAUNCHER_H + +#include + +#include +#include + +class CAfActivityLauncher; + +class TestAfActivityLauncher : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + + void init(); + void cleanup(); + + void testScheme(); + void testUidParsing(); + void testRunningCase(); + void testStartupCase(); + + void callUnusedCallbacks(); + +private: + CAfActivityLauncher *mLauncher; + + RApaLsSession mApaLsSession; + RWsSession mWsSession; + +}; + +#endif // T_AFACTIVITYLAUNCHER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/inc/afapplicationlauncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/inc/afapplicationlauncher.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ +#ifndef AFAPPLICATIONLAUNCHER_H +#define AFAPPLICATIONLAUNCHER_H + +#include + +class RApaLsSession; +class RWsSession; + +class TAfApplicationLauncher +{ + +public: + TAfApplicationLauncher(RApaLsSession &apaLsSession, RWsSession &wsSession); + +public: + TBool isRunning(TUid applicationId); + void startApplicationL(TUid applicationId, const TDesC &uri); + +public: + static TBool expectedIsRunningResult; + + static TInt lastStartAppId; + static HBufC *lastStartUri; + +}; + +#endif // AFAPPLICATIONLAUNCHER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/inc/afstorageclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/inc/afstorageclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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: +* +*/ + +#ifndef AFSTORAGECLIENT_H +#define AFSTORAGECLIENT_H + +#include "afasyncrequestobserver.h" + +class CAfEntry; + +class CAfStorageClient : public CBase +{ +public: + static CAfStorageClient *NewL(MAfAsyncRequestObserver &observer); + static CAfStorageClient *NewLC(MAfAsyncRequestObserver &observer); + virtual ~CAfStorageClient(); + +private: + CAfStorageClient(); + +public: + int launchActivity(const CAfEntry &entry); + +public: + static TInt lastLaunchAppId; + static HBufC *lastLaunchUri; + +}; + +#endif //AFSTORAGECLIENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/src/afapplicationlauncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/src/afapplicationlauncher.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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 "afapplicationlauncher.h" + +TBool TAfApplicationLauncher::expectedIsRunningResult = EFalse; +TInt TAfApplicationLauncher::lastStartAppId = 0; +HBufC* TAfApplicationLauncher::lastStartUri = 0; + +// ----------------------------------------------------------------------------- +// Public part of Construction, destructor +// ----------------------------------------------------------------------------- +// +TAfApplicationLauncher::TAfApplicationLauncher(RApaLsSession &/*apaLsSession*/, RWsSession &/*wsSession*/) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TAfApplicationLauncher::isRunning(TUid /*applicationId*/) +{ + return expectedIsRunningResult; +} + +void TAfApplicationLauncher::startApplicationL(TUid applicationId, const TDesC &uri) +{ + lastStartAppId = applicationId.iUid; + lastStartUri = uri.Alloc(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/src/afstorageclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/mocks/src/afstorageclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +/* +* 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 "afstorageclient.h" + +#include + +TInt CAfStorageClient::lastLaunchAppId = 0; +HBufC* CAfStorageClient::lastLaunchUri = 0; + +CAfStorageClient *CAfStorageClient::NewL(MAfAsyncRequestObserver &observer) +{ + CAfStorageClient *self = CAfStorageClient::NewLC(observer); + CleanupStack::Pop(self); + return self; +} + +CAfStorageClient *CAfStorageClient::NewLC(MAfAsyncRequestObserver &/*observer*/) +{ + CAfStorageClient *self = new (ELeave) CAfStorageClient(); + CleanupStack::PushL(self); + return self; +} + +CAfStorageClient::~CAfStorageClient() +{ + delete lastLaunchUri; + lastLaunchUri = 0; +} + +CAfStorageClient::CAfStorageClient() +{ +} + +int CAfStorageClient::launchActivity(const CAfEntry &entry) +{ + lastLaunchAppId = entry.ApplicationId(); + lastLaunchUri = entry.ActivityId().Alloc(); + + return KErrNone; +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/src/t_afactivitylauncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/src/t_afactivitylauncher.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,114 @@ +/* +* 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_afactivitylauncher.h" + +#include +#include "afapplicationlauncher.h" +#include +#include "afactivitylauncher.h" +#include "afactivitylauncher_p.h" + + +void TestAfActivityLauncher::initTestCase() +{ + QCOMPARE(mApaLsSession.Connect(), KErrNone); + QCOMPARE(mWsSession.Connect(), KErrNone); +} + +void TestAfActivityLauncher::cleanupTestCase() +{ + mApaLsSession.Close(); + mWsSession.Close(); +} + +void TestAfActivityLauncher::init() +{ + QT_TRAP_THROWING(mLauncher = CAfActivityLauncher::NewL(mApaLsSession, mWsSession)); +} + +void TestAfActivityLauncher::cleanup() +{ + delete TAfApplicationLauncher::lastStartUri; + TAfApplicationLauncher::lastStartUri = 0; + TAfApplicationLauncher::lastStartAppId = 0; + + delete CAfStorageClient::lastLaunchUri; + CAfStorageClient::lastLaunchUri = 0; + CAfStorageClient::lastLaunchAppId = 0; + + delete mLauncher; + mLauncher = 0; +} + +void TestAfActivityLauncher::testScheme() +{ + TAfApplicationLauncher::expectedIsRunningResult = ETrue; + + TInt error; + TRAP(error, mLauncher->launchActivityL(_L("appto://DEADBEEF"))); + QCOMPARE(error, KErrNone); + + TRAP(error, mLauncher->launchActivityL(_L("bzzzt://DEADBEEF"))); + QCOMPARE(error, KErrArgument); +} + +void TestAfActivityLauncher::testUidParsing() +{ + TAfApplicationLauncher::expectedIsRunningResult = ETrue; + + TInt error; + TRAP(error, mLauncher->launchActivityL(_L("appto://DEADBEEF"))); + QCOMPARE(error, KErrNone); + + TRAP(error, mLauncher->launchActivityL(_L("appto://INVALID"))); + QCOMPARE(error, KErrGeneral); +} + +void TestAfActivityLauncher::testRunningCase() +{ + TAfApplicationLauncher::expectedIsRunningResult = ETrue; + + _LIT(KActivityUri, "appto://DEADBEEF"); + TRAPD(error, mLauncher->launchActivityL(KActivityUri)); + QCOMPARE(error, KErrNone); + + QCOMPARE(CAfStorageClient::lastLaunchAppId, TInt(0xDEADBEEF)); + QVERIFY(CAfStorageClient::lastLaunchUri->Compare(KActivityUri()) == 0); +} + +void TestAfActivityLauncher::testStartupCase() +{ + TAfApplicationLauncher::expectedIsRunningResult = EFalse; + + _LIT(KActivityUri, "appto://DEADBEEF"); + TRAPD(error, mLauncher->launchActivityL(KActivityUri)); + QCOMPARE(error, KErrNone); + + QCOMPARE(TAfApplicationLauncher::lastStartAppId, TInt(0xDEADBEEF)); + QVERIFY(TAfApplicationLauncher::lastStartUri->Compare(KActivityUri()) == 0); +} + +void TestAfActivityLauncher::callUnusedCallbacks() +{ + CAfActivityLauncherPrivate* imp = CAfActivityLauncherPrivate::NewL(mApaLsSession, mWsSession); + imp->waitActivityRequestCompleted(0, KNullDesC8()); + imp->getThumbnailRequestCompleted(0, 0, 0); + imp->dataChangeNotificationCompleted(0); + delete imp; +} + +QTEST_MAIN(TestAfActivityLauncher) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/t_afactivitylauncher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_afactivitylauncher/t_afactivitylauncher.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +CONFIG += qtestlib console + +INCLUDEPATH += ./inc \ + mocks/inc/ \ + ../../inc \ + ../../../inc \ + +HEADERS += ./inc/t_afactivitylauncher.h + +SOURCES += mocks/src/afapplicationlauncher.cpp \ + ./src/t_afactivitylauncher.cpp \ + ../../src/afactivitylauncher.cpp \ + ../../src/afactivitylauncher_p.cpp \ + mocks/src/afstorageclient.cpp \ + + + +LIBS += -linetprotutil \ + -lafstoragecommon.lib \ + -lestor \ + -lapgrfx \ + -lws32 \ + +symbian:!coverage: CONFIG += symbian_test diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/inc/t_tapplicationlauncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/inc/t_tapplicationlauncher.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +/* +* 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: +* +*/ + +#ifndef TESTTAPPLICATIONLAUNCHER_H +#define TESTTAPPLICATIONLAUNCHER_H + +#include + +#include +#include + +#include + +class TestTApplicationLauncher : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + + void testIsRunning(); + void testStartApp(); + + void testLaunchActivity_data(); + void testLaunchActivity(); + + void testLeaveWhenUriIsInvalid(); + void testLeaveWhenApplicationIsCorrupted(); + +private: + bool sendToBackground(const TUid &uid); + TUid getForegroundAppUid(); + QUrl buildUri(const TUid &uid, const QString &activityName); + +private: + RApaLsSession mApaLsSession; + RWsSession mWsSession; + +}; + +#endif TESTTAPPLICATIONLAUNCHER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/src/t_tapplicationlauncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/src/t_tapplicationlauncher.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,183 @@ +/** 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_tapplicationlauncher.h" + +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include "afapplicationlauncher.h" + +const TUid KIconApplicationUid = {0xEd0b4e47}; +const TUid KActivityApplicationUid = {0xEBADF00D}; +const TUid KInvalidUid = {0xDEADBEEF}; +const TUid KCorruptedApplicationUid = {0xE5C3B14E}; + +namespace { + const char KIconApplicationName[] = "appwithicon"; +} + +QTM_USE_NAMESPACE + +// --------------------------------------------------------------------------- +// Test cases +// --------------------------------------------------------------------------- +// +void TestTApplicationLauncher::initTestCase() +{ + QCOMPARE(mApaLsSession.Connect(), KErrNone); + QCOMPARE(mWsSession.Connect(), KErrNone); +} + +void TestTApplicationLauncher::cleanupTestCase() +{ + mApaLsSession.Close(); + mWsSession.Close(); +} + +void TestTApplicationLauncher::testIsRunning() +{ + TAfApplicationLauncher launcher(mApaLsSession, mWsSession); + + QVERIFY(!launcher.isRunning(KIconApplicationUid)); + + quint64 iconAppId; + QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId)); + QVERIFY(launcher.isRunning(KIconApplicationUid)); + + QVERIFY(TsTestUtils::closeApplication(iconAppId)); + QVERIFY(!launcher.isRunning(KIconApplicationUid)); +} + +void TestTApplicationLauncher::testStartApp() +{ + QSystemSemaphore semaphore("PublishActivityApp"); + TAfApplicationLauncher launcher(mApaLsSession, mWsSession); + + QVERIFY(!launcher.isRunning(KActivityApplicationUid)); + + TRAPD(startError, launcher.startApplicationL(KActivityApplicationUid, KNullDesC())); + QCOMPARE(startError, KErrNone); + + QVERIFY(semaphore.acquire()); + + QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid)); + QVERIFY(!launcher.isRunning(KActivityApplicationUid)); +} + +// --------------------------------------------------------------- + +void TestTApplicationLauncher::testLaunchActivity_data() +{ + QTest::addColumn("activityName"); + + QTest::newRow("normal") << "blahblahblah"; + QTest::newRow("special characters") << "asd $&+,/:;=?@ \"<>#%{}|\\^~[]`asd"; +} + +void TestTApplicationLauncher::testLaunchActivity() +{ + QSystemSemaphore semaphore("PublishActivityApp"); + + TAfApplicationLauncher launcher(mApaLsSession, mWsSession); + QVERIFY(!launcher.isRunning(KActivityApplicationUid)); + + QFETCH(QString, activityName); + HBufC *uriDescriptor = XQConversions::qStringToS60Desc(QString(buildUri(KActivityApplicationUid, activityName).toEncoded())); + TRAPD(startError, launcher.startApplicationL(KActivityApplicationUid, *uriDescriptor)); + delete uriDescriptor; + QCOMPARE(startError, KErrNone); + semaphore.acquire(); + + QCOMPARE(QValueSpaceSubscriber("/PublishActivityApp/ActivityName").value().toString(), activityName); + + QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid)); + QVERIFY(!launcher.isRunning(KIconApplicationUid)); +} + +// --------------------------------------------------------------- + +void TestTApplicationLauncher::testLeaveWhenUriIsInvalid() +{ + TAfApplicationLauncher launcher(mApaLsSession, mWsSession); + TRAPD(startError, launcher.startApplicationL(KInvalidUid, KNullDesC())); + QCOMPARE(startError, KErrNotFound); +} + +void TestTApplicationLauncher::testLeaveWhenApplicationIsCorrupted() +{ + TAfApplicationLauncher launcher(mApaLsSession, mWsSession); + + // We're going to test Launcher behavior when someone tries to start + // application with missing executable file + TRAPD(startError, launcher.startApplicationL(KCorruptedApplicationUid, KNullDesC())); + QCOMPARE(startError, KErrNotFound); +} + +// --------------------------------------------------------------------------- +// Helper methods +// --------------------------------------------------------------------------- +// +QUrl TestTApplicationLauncher::buildUri(const TUid &uid, const QString &activityName) +{ + QUrl uri; + uri.setScheme("appto"); + uri.setHost(QString("%1").arg(static_cast(uid.iUid), 8, 16, QChar('0'))); + uri.addQueryItem(Af::KActivityUriNameKey, activityName); + return uri; +} + +bool TestTApplicationLauncher::sendToBackground(const TUid &uid) +{ + TApaTaskList taskList(mWsSession); + TApaTask task = taskList.FindApp(uid); + bool taskExists = task.Exists(); + if (taskExists) { + task.SendToBackground(); + } + return taskExists; +} + +TUid TestTApplicationLauncher::getForegroundAppUid() +{ + // get all window groups + RArray windowGroupList; + CleanupClosePushL(windowGroupList); + User::LeaveIfError(mWsSession.WindowGroupList(0, &windowGroupList)); + + if (windowGroupList.Count() == 0) { + User::Leave(KErrNotFound); + } + + // get uid of first window group + CApaWindowGroupName* windowGroupName = CApaWindowGroupName::NewLC(mWsSession, windowGroupList[0].iId); + TUid foregroundAppUid = windowGroupName->AppUid(); + CleanupStack::PopAndDestroy(windowGroupName); + CleanupStack::PopAndDestroy(&windowGroupList); + + return foregroundAppUid; +} + +QTEST_MAIN(TestTApplicationLauncher) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/t_tapplicationlauncher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/t_tapplicationlauncher.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +# +# 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: +# + +CONFIG += qtestlib console + +CONFIG *= mobility +MOBILITY *= publishsubscribe + +INCLUDEPATH += inc \ + +SOURCES += ./src/t_tapplicationlauncher.cpp +HEADERS += ./inc/t_tapplicationlauncher.h + +SOURCES += ../../src/afapplicationlauncher.cpp \ + +HEADERS += ../../inc/afapplicationlauncher.h \ + +LIBS += + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.CAPABILITY = ALL -TCB + + LIBS += -lapgrfx \ # for TApaTaskList + -lapparc \ # for TApaAppInfo + -lcone \ # for CCoeEnv + -lws32 \ # for RWsSession + -lxqutils \ # for XQConversions + +} + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/afactivitylauncher/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/afactivitylauncher/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +# +# 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: +# + +TEMPLATE = subdirs +CONFIG += ordered + + +SUBDIRS += t_afactivitylauncher \ + +SUBDIRS += ../../../internal/tsapps/testapp \ + ../../../internal/tstestutils \ + t_tapplicationlauncher \ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/src/hbcore/activity/activity.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/src/hbcore/activity/activity.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +# +############################################################################# +## +## Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (developer.feedback@nokia.com) +## +## This file is part of the UI Extensions for Mobile. +## +## GNU Lesser General Public License Usage +## This file may be used under the terms of the GNU Lesser General Public +## License version 2.1 as published by the Free Software Foundation and +## appearing in the file LICENSE.LGPL included in the packaging of this file. +## Please review the following information to ensure the GNU Lesser General +## Public License version 2.1 requirements will be met: +## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at developer.feedback@nokia.com. +## +############################################################################# + + +INCLUDEPATH += $$PWD +DEPENDPATH += $$PWD + +PUBLIC_HEADERS += $$PWD/hbactivitymanager.h + +INTERNAL_HEADERS += $$PWD/hbactivitymanager_p.h \ + $$PWD/hbactivityplugininterface_p.h \ + +SOURCES += $$PWD/hbactivitymanager.cpp \ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/src/hbcore/activity/hbactivitymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/src/hbcore/activity/hbactivitymanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,297 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#include "hbactivitymanager.h" +#include "hbactivitymanager_p.h" + +#include +#include +#include + +#include "hbmainwindow.h" +#include "hbinstance.h" +#include "hbactivityplugininterface_p.h" + +/*! + @beta + @hbcore + \class HbActivityManager + \brief HbActivityManager is an access point for Activities features. + + Activities can be described as stored application states (for example bookmarks + in web browser) or actions that can be performed using application (play next + song, start new game). + + The HbActivityManager class allows to use Activities features in Hb application. + It can be used to access, add, remove and modify activities. It also notifies the + application about activity change requests from other applications. +*/ + +/*! +\internal +*/ +HbActivityManagerPrivate::HbActivityManagerPrivate(HbActivityManager *q) : q(q), mActivityPlugin(0) +{ +} + +/*! +\internal +*/ +HbActivityManagerPrivate::~HbActivityManagerPrivate() +{ +} + +/*! +\internal +*/ +HbActivityPluginInterface *HbActivityManagerPrivate::activityPlugin() const +{ + if (!mActivityPlugin) { + foreach (const QString &path, QCoreApplication::libraryPaths()) { + QString pluginPath; + + QString libPath = QDir::toNativeSeparators(path) + QDir::separator() + QLatin1String("hbactivityplugin"); +#ifdef Q_OS_SYMBIAN + libPath += QLatin1String(".qtplugin"); + QLibrary library(libPath); + if (QFile::exists(libPath) && library.load()) { + library.unload(); + pluginPath = libPath; + } +#else + QLibrary library(libPath); + if (library.load()) { + library.unload(); + pluginPath = library.fileName(); + } +#endif + + QPluginLoader loader(pluginPath); + QObject *pluginInstance = loader.instance(); + if (pluginInstance) { + mActivityPlugin = qobject_cast(pluginInstance); + if (mActivityPlugin) { + q->connect(pluginInstance, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString))); + } else { +#if defined(Q_OS_SYMBIAN) + qWarning("Cannot load activity plugin. Features related to activities won't be available."); +#endif + loader.unload(); + } + } + } + } + return mActivityPlugin; +} + +/*! +\internal +*/ +bool HbActivityManagerPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + bool result(false); + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + result = plugin->addActivity(activityId, data, parameters); + } + return result; +} + +/*! +\internal +*/ +bool HbActivityManagerPrivate::removeActivity(const QString &activityId) +{ + bool result(false); + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + result = plugin->removeActivity(activityId); + } + return result; +} + +/*! +\internal +*/ +QList HbActivityManagerPrivate::activities() const +{ + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + return plugin->activities(); + } else { + return QList(); + } +} + +/*! +\internal +*/ +bool HbActivityManagerPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + bool result(false); + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + result = plugin->updateActivity(activityId, data, parameters); + } + return result; +} + +/*! +\internal +*/ +QVariant HbActivityManagerPrivate::activityData(const QString &activityId) const +{ + QVariant result; + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + result = plugin->activityData(activityId); + } + return result; +} + +/*! +\internal +*/ +bool HbActivityManagerPrivate::waitActivity() +{ + bool result(false); + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + result = plugin->waitActivity(); + } + return result; +} + +/*! +\internal +*/ +void HbActivityManagerPrivate::parseCommandLine(const QStringList &commandLineParams, Hb::ActivationReason &reason, QString &id, QVariantHash ¶ms) const +{ + HbActivityPluginInterface *plugin = activityPlugin(); + if (plugin) { + QVariantHash activityParams = plugin->parseCommandLine(commandLineParams); + if (!activityParams.isEmpty()) { + reason = Hb::ActivationReasonActivity; + id = activityParams.value("activityname").toString(); + params = activityParams; + } + } +} + +/*! + Constructor + \a parent. Parent of this object. + */ +HbActivityManager::HbActivityManager(QObject *parent) : QObject(parent), d_ptr(new HbActivityManagerPrivate(this)) +{ +} + +/*! + Destructor + */ +HbActivityManager::~HbActivityManager() +{ + delete d_ptr; +} + +/*! + Allows to save activity. + \a activityId. Activity name used as identifier of activities + \a data. Activity data that should be stored. It will allow application to restore its state later + \a parameters. Activity properties: screenshot, localized name, hidden flag, etc. + Returns true if activity was succesfully saved, otherwise returns false. + */ +bool HbActivityManager::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + Q_D(HbActivityManager); + return d->addActivity(activityId, data, parameters); +} + +/*! + Allows to delete activity. + \a activityId. Activity name used as identifier of activities + Returns true if activity was succesfully deleted, otherwise returns false. + */ +bool HbActivityManager::removeActivity(const QString &activityId) +{ + Q_D(HbActivityManager); + return d->removeActivity(activityId); +} + +/*! + Allows to update saved activity. + \a activityId. Activity name used as identifier of activities + \a data. Activity data that should be stored. It will allow application to restore its state later + \a parameters. Activity properties: screenshot, localized name, hidden flag, etc. + Returns true if activity was succesfully updated, otherwise returns false. + */ +bool HbActivityManager::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + Q_D(HbActivityManager); + return d->updateActivity(activityId, data, parameters); +} + +/*! + Returns activities list. It returns activities as name and screenshot. + */ +QList HbActivityManager::activities() const +{ + Q_D(const HbActivityManager); + return d->activities(); +} + +/*! + Returns data of activity specified by \a activityId + */ +QVariant HbActivityManager::activityData(const QString &activityId) const +{ + Q_D(const HbActivityManager); + return d->activityData(activityId); +} + +/*! + Subscribes to activity manager + */ +bool HbActivityManager::waitActivity() +{ + Q_D(HbActivityManager); + return d->waitActivity(); +} + +/*! + Searches \a commandLineArguments for pair of "-activity" marker and + activity URI, which should have following syntax: + + appto://UID3?activityname=activity-name-value&key1=value + + If both marker and valid URI are found, \a reason is set to + Hb::ActivationReasonActivity, and \a activityId and \a parameters are + filled with parsed values. +*/ +void HbActivityManager::parseCommandLine(const QStringList &commandLineParams, Hb::ActivationReason &reason, QString &id, QVariantHash ¶ms) const +{ + Q_D(const HbActivityManager); + d->parseCommandLine(commandLineParams, reason, id, params); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/src/hbcore/activity/hbactivitymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/src/hbcore/activity/hbactivitymanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#ifndef HBACTIVITYMANAGER_H +#define HBACTIVITYMANAGER_H + +#include +#include +#include +#include +#include + +#include +#include + +class HbActivityManagerPrivate; + +class HB_CORE_EXPORT HbActivityManager : public QObject +{ + Q_OBJECT + +public: + explicit HbActivityManager(QObject *parent = 0); + virtual ~HbActivityManager(); + + bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + bool removeActivity(const QString &activityId); + bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + QList activities() const; + QVariant activityData(const QString &activityId) const; + bool waitActivity(); + void parseCommandLine(const QStringList &commandLineParams, Hb::ActivationReason &reason, QString &id, QVariantHash ¶ms) const; + +signals: + void activityRequested(const QString &activityId); + +protected: + HbActivityManagerPrivate *d_ptr; + +private: + Q_DISABLE_COPY(HbActivityManager) + Q_DECLARE_PRIVATE_D(d_ptr, HbActivityManager) + +}; + +#endif // HBACTIVITYMANAGER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/src/hbcore/activity/hbactivitymanager_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/src/hbcore/activity/hbactivitymanager_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#ifndef HBACTIVITYMANAGER_P_H +#define HBACTIVITYMANAGER_P_H + +class HbActivityManager; +class HbActivityPluginInterface; + +class HbActivityManagerPrivate +{ +public: + HbActivityManagerPrivate(HbActivityManager *q); + ~HbActivityManagerPrivate(); + +public: + bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + bool removeActivity(const QString &activityId); + bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + QList activities() const; + QVariant activityData(const QString &activityId) const; + bool waitActivity(); + void parseCommandLine(const QStringList &commandLineParams, Hb::ActivationReason &reason, QString &id, QVariantHash ¶ms) const; + +private: + HbActivityPluginInterface *activityPlugin() const; + +private: + HbActivityManager *q; + mutable HbActivityPluginInterface *mActivityPlugin; +}; + +#endif // HBACTIVITYMANAGER_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/src/hbcore/activity/hbactivityplugininterface_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/src/hbcore/activity/hbactivityplugininterface_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#ifndef HBACTIVITYPLUGININTERFACE_P_H +#define HBACTIVITYPLUGININTERFACE_P_H + +#include +#include +#include +#include +#include +#include + +class HbActivityPluginInterface : public QObject +{ + Q_OBJECT +public: + HbActivityPluginInterface(QObject *parent = 0) : QObject(parent) {} + +public: + virtual bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) = 0; + virtual bool removeActivity(const QString &activityId) = 0; + virtual bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) = 0; + virtual QList activities() = 0; + virtual QVariant activityData(const QString &activityId) = 0; + virtual bool waitActivity() = 0; + virtual QVariantHash parseCommandLine(const QStringList &commandLineParams) = 0; + +signals: + void activityRequested(const QString &activityId); +}; + +Q_DECLARE_INTERFACE(HbActivityPluginInterface, "HbActivityPluginInterface/1.0") + +#endif // HBACTIVITYPLUGININTERFACE_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/src/hbcore/core/hbapplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/src/hbcore/core/hbapplication.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,418 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#include "hbapplication.h" +#include "hbapplication_p.h" +#include "hbsplashscreen_p.h" +#include "hbactivitymanager.h" +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#endif // Q_OS_SYMBIAN + +// ### TODO remove this and do it in mainwindow_p once QGestureManager problems are fixed +#ifdef HB_GESTURE_FW +#include "hbmousepangesturerecognizer_p.h" +#include "hbswipegesturerecognizer_p.h" +#include "hbtapgesturerecognizer_p.h" +#include "hbtapandholdgesturerecognizer_p.h" +#endif + +/*! + @stable + @hbcore + \class HbApplication + \brief The HbApplication class is a place for common functionality. + + HbApplication class is a place for common functionality. + + In each and every application using LibHb, the application object is + always instantiated in main() before creating any GUI controls. Later + when the GUI controls have been created and shown, the control is given + to the main event loop of the application: + + \dontinclude graphicsitemdemo/main.cpp + \skip int main( + \until HbMainWindow + \skip show() + \until } + + To support Hb-widgets with QApplication the actual implementation + of HbApplication is available in HbInstance. + + Unless the Hb::NoSplash flag is passed, the HbApplication constructor will + try to show a suitable splash screen for the application. On some platforms + there will be no splash screens available at all and thus nothing will be + shown. + + Applications that support the 'activities' concept may check the start-up + reason like this: + + \code + HbApplication app(argc, argv); + if(app.activateReason() == HbApplication::activity) { + // start-up case + } else if (app.activateReason() == HbApplication::service) { + // service lauch + } else { + // normal launch + } + + MyActivitiesEngine logic; + // connect to the application signal + QObject::connect(&app, SIGNAL(activate()), &logic, SLOT(openActivity())); + \endcode + + When new activity needs to be activated signal is emited. Application might + observe it and start correct handling to return to saved state. Logic should + check what is the activity id and data to return to correct state. + + \sa QApplication +*/ + +/*! + \fn void HbApplication::activate() + + This signal is emitted when some activity needs to be shown. +*/ + +static int& preInitApp(int &argc) +{ + // This function contains code that needs to be executed before + // the QApplication constructor. + +#if defined(Q_OS_SYMBIAN) + // Disable legacy screen furniture. + QApplication::setAttribute(Qt::AA_S60DontConstructApplicationPanes); + + // Temporary solution until Hb specific style is ready. + QApplication::setStyle(new QWindowsStyle); +#endif //Q_OS_SYMBIAN + + return argc; +} + +static void initSplash(Hb::ApplicationFlags flags) +{ + if (flags & Hb::NoSplash) { + return; + } + + // Show the splash screen (start() also makes sure it is really drawn before + // continuing with anything else). + + HbSplash::Flags splashFlags = HbSplash::Default; + if (flags & Hb::SplashFixedVertical) { + splashFlags |= HbSplash::FixedVertical; + } else if (flags & Hb::SplashFixedHorizontal) { + splashFlags |= HbSplash::FixedHorizontal; + } + +#ifdef Q_OS_SYMBIAN + QTime t; + t.start(); +#endif + + HbSplashScreen::start(splashFlags); + +#ifdef Q_OS_SYMBIAN + qDebug("[hbsplash] %d ms", t.elapsed()); +#endif +} + +static void initialize() +{ +// ### TODO remove this and enable HbMainWindowPrivate::initGestures once +// the QGestureManager problems are fixed. +#ifdef HB_GESTURE_FW + QGestureRecognizer::unregisterRecognizer(Qt::TapGesture); + QGestureRecognizer::unregisterRecognizer(Qt::TapAndHoldGesture); + QGestureRecognizer::unregisterRecognizer(Qt::PanGesture); + QGestureRecognizer::unregisterRecognizer(Qt::SwipeGesture); + + QGestureRecognizer::registerRecognizer(new HbTapGestureRecognizer); + QGestureRecognizer::registerRecognizer(new HbTapAndHoldGestureRecognizer); + QGestureRecognizer::registerRecognizer(new HbMousePanGestureRecognizer); + QGestureRecognizer::registerRecognizer(new HbSwipeGestureRecognizer); +#endif +} + +/*! + Constructs the application with \a argc and \a argv. +*/ +HbApplication::HbApplication(int &argc, char *argv[], Hb::ApplicationFlags flags) + : QApplication(preInitApp(argc), argv) +{ + initSplash(flags); // must be the first thing we do here + + d_ptr = new HbApplicationPrivate(this); + + // No expensive operations allowed here, prefer performing such + // initialization as part of HbMainWindow's delayed construction instead. + + initialize(); +} + +#if defined(Q_WS_S60) +HbApplication::HbApplication(QApplication::QS60MainApplicationFactory factory, + int &argc, char *argv[], Hb::ApplicationFlags flags) + : QApplication(factory, preInitApp(argc), argv) +{ + initSplash(flags); // must be the first thing we do here + + d_ptr = new HbApplicationPrivate(this); + + // No expensive operations allowed here, prefer performing such + // initialization as part of HbMainWindow's delayed construction instead. + + initialize(); +} +#endif // Q_WS_S60 + +/*! + Destructor. + */ +HbApplication::~HbApplication() +{ + hideSplash(); +} + +/*! + Hides the splash screen if it is visible. Normally this is done by + HbMainWindow but if an application does not create any HbMainWindow + instances then there may be a need to hide the splash screen manually. +*/ +void HbApplication::hideSplash() +{ + HbSplashScreen::destroy(); +} + +#if defined(Q_WS_S60) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "hbgraphicsscene_p.h" + +#ifdef BUILD_HB_INTERNAL +static void forceRefresh() +{ + foreach (HbMainWindow *window, hbInstance->allMainWindows()) { + QEvent event(QEvent::WindowActivate); + QApplication::sendEvent(window, &event); + } +} +#endif + +/*! + Handles the S60 events. + */ +bool HbApplication::symbianEventFilter(const QSymbianEvent *event) +{ + if (event->type() != QSymbianEvent::WindowServerEvent) { + return QApplication::symbianEventFilter(event); + } + const TWsEvent *aEvent = event->windowServerEvent(); + switch (aEvent->Type()) { + // In case of EEventScreenDeviceChanged-event, the current screen + // ratio is checked and orientation is set accordingly. + case EEventScreenDeviceChanged:{ + + QList windows = hbInstance->allMainWindows(); + RWindow *win = static_cast(windows.at(0)->effectiveWinId()->DrawableWindow()); + + TSize rWinSize; + if (win) + rWinSize = win->Size(); + + // fix for emulator / changing modes + QSize nSize( (int)rWinSize.iWidth, (int)rWinSize.iHeight ); + foreach (HbMainWindow* w, windows) { + w->resize(nSize); + } + + + } + return false; //continue handling in QApplication::s60ProcessEvent + case KChangeDirection:{ + TUint8* dataptr = aEvent->EventData(); + switch(*dataptr){ + case 0: + HbApplication::setLayoutDirection(Qt::LeftToRight); + break; + case 1: + HbApplication::setLayoutDirection(Qt::RightToLeft); + break; + default: + qWarning("HbApplication::s60EventFilter: Unknown layout direction received"); + break; + } + } + return false; + case KChangeOrientation:{ + TUint8* dataptr = aEvent->EventData(); + switch(*dataptr){ + case 0: + hbInstance->setOrientation(Qt::Vertical); + break; + case 1: + hbInstance->setOrientation(Qt::Horizontal); + break; + default: + qWarning("HbApplication::s60EventFilter: Unknown orientation received"); + break; + } + } + return false; + case KChangeDeviceProfile:{ + TUint8* dataptr = aEvent->EventData(); + QStringList names = HbDeviceProfile::profileNames(); + if(*dataptr > names.count() - 1){ + qWarning("HbApplication::s60EventFilter: Unknown device profile received"); + }else{ + HbDeviceProfile profile(names.value(*dataptr)); + HbDeviceProfileManager::select(profile); + HbInstancePrivate::d_ptr()->setOrientation(profile.orientation(),false); + } + } + return false; +#ifdef BUILD_HB_INTERNAL + case KChangeTouchAreaVis:{ + TUint8* dataptr = aEvent->EventData(); + HbTouchAreaPrivate::setOutlineDrawing(*dataptr == 1); + forceRefresh(); + } + return false; + case KChangeTextItemVis:{ + TUint8* dataptr = aEvent->EventData(); + HbTextItemPrivate::outlinesEnabled = *dataptr == 1; + forceRefresh(); + } + return false; + case KChangeIconItemVis:{ + TUint8* dataptr = aEvent->EventData(); + HbIconItemPrivate::outlinesEnabled = *dataptr == 1; + forceRefresh(); + } + return false; + case KChangeFpsCounterVis:{ + TUint8* dataptr = aEvent->EventData(); + HbGraphicsScenePrivate::fpsCounterEnabled = *dataptr == 1; + forceRefresh(); + } + return false; +#endif + default: + return QApplication::symbianEventFilter(event); + } +} + +#endif // Q_WS_S60 + +HbApplicationPrivate::HbApplicationPrivate(HbApplication *parent) + : QObject(parent), q_ptr(parent), mActivateReason(Hb::ActivationReasonNormal) +{ + mActivityManager = new HbActivityManager(this); + connect(mActivityManager, SIGNAL(activityRequested(QString)), this, SLOT(prepareActivityData(QString))); + mActivityManager->parseCommandLine(qApp->arguments(), mActivateReason, mActivateId, mActivateParams); +} + +HbApplicationPrivate::~HbApplicationPrivate() +{ +} + +QVariant HbApplicationPrivate::activateData() +{ + if (!mActivateId.isNull() && !mActivateData.isValid()) { + mActivateData = mActivityManager->activityData(mActivateId); + } + return mActivateData; +} + +void HbApplicationPrivate::prepareActivityData(const QString &activityId) +{ + mActivateReason = Hb::ActivationReasonActivity; + mActivateId = activityId; + mActivateData = QVariant(); + mActivateParams = QVariantHash(); + + emit q_ptr->activate(); +} + +/*! + Returns instance of class responsible for activities handling. + */ +HbActivityManager *HbApplication::activityManager() +{ + Q_D(HbApplication); + return d->mActivityManager; +} + +/*! + Returns activation parameters parsed from activation URI. + */ +QVariantHash HbApplication::activateParams() const +{ + Q_D(const HbApplication); + return d->mActivateParams; +} + +/*! + Returns activate reason. + */ +Hb::ActivationReason HbApplication::activateReason() const +{ + Q_D(const HbApplication); + return d->mActivateReason; +} + +/*! + Last activated activity id. + */ +QString HbApplication::activateId() const +{ + Q_D(const HbApplication); + return d->mActivateId; +} + +/*! + Last activated activity data. + */ +QVariant HbApplication::activateData() +{ + Q_D(HbApplication); + return d->activateData(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/core.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/core.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,118 @@ +###################################################################### +# Unit tests that depend on HbCore +###################################################################### + +TEMPLATE = subdirs + +SUBDIRS += unittest_hbaction +SUBDIRS += unittest_hbanchorlayout +SUBDIRS += unittest_hbcolorscheme +SUBDIRS += unittest_hbevent +SUBDIRS += unittest_hbframedrawer +SUBDIRS += unittest_hbframedrawerpool +SUBDIRS += unittest_hbgesturefilter +SUBDIRS += unittest_hbgraphicsscene +SUBDIRS += unittest_hbicon +SUBDIRS += unittest_hbiconanimationmanager +SUBDIRS += unittest_hbiconitem +SUBDIRS += unittest_hbinstance +SUBDIRS += unittest_hbfeedbackengine +SUBDIRS += unittest_hbfeedbackmanager +SUBDIRS += unittest_hbfeedbackplugin +SUBDIRS += unittest_hbfeedbackplugingroup +SUBDIRS += unittest_hbmenu +SUBDIRS += unittest_hbscrollarea +SUBDIRS += unittest_hbscrollbar +SUBDIRS += unittest_hbstackedlayout +SUBDIRS += unittest_hbstackedwidget +SUBDIRS += unittest_hbtheme +SUBDIRS += unittest_hbtoolbutton +SUBDIRS += unittest_hbtooltip +SUBDIRS += unittest_hbwidget +SUBDIRS += unittest_hbextendedlocale +SUBDIRS += unittest_hbstringutil +SUBDIRS += unittest_hbdirectorynamelocalizer +SUBDIRS += unittest_hbnumbergrouping +SUBDIRS += unittest_hbframebackground +SUBDIRS += unittest_hbsmileytheme +SUBDIRS += unittest_hblengthlimiter +SUBDIRS += unittest_hbfindfile +SUBDIRS += unittest_hbtranslator +symbian:SUBDIRS += unittest_hbindicatorsymbian + +developer { + SUBDIRS += unittest_hbactivitymanager + SUBDIRS += unittest_hbapplication + SUBDIRS += unittest_hbbackgrounditem + SUBDIRS += unittest_hbbatteryindicator + #SUBDIRS += unittest_hbcolortheme # temporarily disabled due to CI failure + SUBDIRS += unittest_hbdecorator + SUBDIRS += unittest_hbdeviceprofile + SUBDIRS += unittest_hbdevicemodeinfo + effects { + SUBDIRS += unittest_hbeffectcontroller + SUBDIRS += unittest_hbeffectdata + SUBDIRS += unittest_hbeffectgroup + SUBDIRS += unittest_hbeffectrotate + SUBDIRS += unittest_hbeffectscale + SUBDIRS += unittest_hbeffectxmlparser + SUBDIRS += unittest_hbeffecttheme + + SUBDIRS += unittest_hbvgbceffect + SUBDIRS += unittest_hbvgblureffect + SUBDIRS += unittest_hbvgchainedeffect + SUBDIRS += unittest_hbvgcolorizeeffect + SUBDIRS += unittest_hbvgeffect + SUBDIRS += unittest_hbvggloweffect + SUBDIRS += unittest_hbvghsleffect + SUBDIRS += unittest_hbvgoutlineeffect + SUBDIRS += unittest_hbvgreflectioneffect + SUBDIRS += unittest_hbvgshadoweffect + SUBDIRS += unittest_hbvgmaskeffect + } + SUBDIRS += unittest_hbfont + SUBDIRS += unittest_hbiconloader + SUBDIRS += unittest_hbicontheme + SUBDIRS += unittest_hbindicator + SUBDIRS += unittest_hbindicatorgroup + SUBDIRS += unittest_hbiniparser + SUBDIRS += unittest_hbmenuitem + SUBDIRS += unittest_hbmeshlayout + SUBDIRS += unittest_hbmemorymanager + SUBDIRS += unittest_hbdialog + SUBDIRS += unittest_hbrichtextitem +# SUBDIRS += unittest_hbsensororientation + SUBDIRS += unittest_hbsharedcontainer_string + SUBDIRS += unittest_hbsharedcontainer_variant + SUBDIRS += unittest_hbsharedcontainer_vector + SUBDIRS += unittest_hbsignalindicator + SUBDIRS += unittest_hbsmartpointer + SUBDIRS += unittest_hbsplash + SUBDIRS += unittest_hbstyleloader + SUBDIRS += unittest_hbtextitem + SUBDIRS += unittest_hbmarqueeitem + SUBDIRS += unittest_hbtextutils + SUBDIRS += unittest_hbthemeutils + SUBDIRS += unittest_hbtimer + SUBDIRS += unittest_hbtitlebar + SUBDIRS += unittest_hbtitlepane + SUBDIRS += unittest_hbtoolbar + SUBDIRS += unittest_hbtoolbarextension + SUBDIRS += unittest_hbtypefacexmlparser + SUBDIRS += unittest_hbwidgetloader + SUBDIRS += unittest_hbtextitemprivate + + win32|linux-* { + SUBDIRS += unittest_hbthemeclientqt + + } + + contains(DEFINES, HB_GESTURE_FW) { + SUBDIRS += unittest_hbtapgesturerecognizer + + # Disabled until timer related issues solved + #SUBDIRS += unittest_hbtapandholdgesturerecognizer + } +} + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/hb_unittests.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/hb_unittests.iby Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,566 @@ +#ifndef __HBUNITTESTS_IBY__ +#define __HBUNITTESTS_IBY__ + +#include + +#define HB_UPGRADABLE_APP_REG_RSC(NAME) data=DATAZ_\PRIVATE\10003A3F\IMPORT\APPS\ ## NAME ## _reg.rsc Private\10003a3f\import\apps\ ## NAME ## _reg.rsc +#define HB_PLUGIN_STUB(NAME, SUBDIR) data=\epoc32\data\z\resource\plugins\##SUBDIR##\##NAME##.qtplugin RESOURCE_FILES_DIR\plugins\##SUBDIR##\##NAME##.qtplugin + +file=ABI_DIR\BUILD_DIR\unittest_hbabstractbutton.exe SHARED_LIB_DIR\unittest_hbabstractbutton.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbabstractbutton) +S60_APP_RESOURCE(unittest_hbabstractbutton) + +file=ABI_DIR\BUILD_DIR\unittest_hbabstractslider.exe SHARED_LIB_DIR\unittest_hbabstractslider.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbabstractslider) +S60_APP_RESOURCE(unittest_hbabstractslider) + +file=ABI_DIR\BUILD_DIR\unittest_hbaction.exe SHARED_LIB_DIR\unittest_hbaction.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbaction) +S60_APP_RESOURCE(unittest_hbaction) + +file=ABI_DIR\BUILD_DIR\unittest_hbanchorlayout.exe SHARED_LIB_DIR\unittest_hbanchorlayout.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbanchorlayout) +S60_APP_RESOURCE(unittest_hbanchorlayout) + +file=ABI_DIR\BUILD_DIR\unittest_hbdevicedialog.exe SHARED_LIB_DIR\unittest_hbdevicedialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdevicedialog) +S60_APP_RESOURCE(unittest_hbdevicedialog) +file=ABI_DIR\BUILD_DIR\hbdevicedialogunittestplugin.dll SHARED_LIB_DIR\hbdevicedialogunittestplugin.dll +HB_PLUGIN_STUB(hbdevicedialogunittestplugin, devicedialogs) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffect.exe SHARED_LIB_DIR\unittest_hbeffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffect) +S60_APP_RESOURCE(unittest_hbeffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffectcontroller.exe SHARED_LIB_DIR\unittest_hbeffectcontroller.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffectcontroller) +S60_APP_RESOURCE(unittest_hbeffectcontroller) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffectdata.exe SHARED_LIB_DIR\unittest_hbeffectdata.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffectdata) +S60_APP_RESOURCE(unittest_hbeffectdata) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffectgroup.exe SHARED_LIB_DIR\unittest_hbeffectgroup.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffectgroup) +S60_APP_RESOURCE(unittest_hbeffectgroup) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffectrotate.exe SHARED_LIB_DIR\unittest_hbeffectrotate.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffectrotate) +S60_APP_RESOURCE(unittest_hbeffectrotate) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffectscale.exe SHARED_LIB_DIR\unittest_hbeffectscale.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffectscale) +S60_APP_RESOURCE(unittest_hbeffectscale) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffecttheme.exe SHARED_LIB_DIR\unittest_hbeffecttheme.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffecttheme) +S60_APP_RESOURCE(unittest_hbeffecttheme) + +file=ABI_DIR\BUILD_DIR\unittest_hbeffectxmlparser.exe SHARED_LIB_DIR\unittest_hbeffectxmlparser.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbeffectxmlparser) +S60_APP_RESOURCE(unittest_hbeffectxmlparser) + +file=ABI_DIR\BUILD_DIR\unittest_hbdocumentloader.exe SHARED_LIB_DIR\unittest_hbdocumentloader.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdocumentloader) +S60_APP_RESOURCE(unittest_hbdocumentloader) + +file=ABI_DIR\BUILD_DIR\unittest_hbframedrawer.exe SHARED_LIB_DIR\unittest_hbframedrawer.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbframedrawer) +S60_APP_RESOURCE(unittest_hbframedrawer) + +file=ABI_DIR\BUILD_DIR\unittest_hbgesturefilter.exe SHARED_LIB_DIR\unittest_hbgesturefilter.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbgesturefilter) +S60_APP_RESOURCE(unittest_hbgesturefilter) + +file=ABI_DIR\BUILD_DIR\unittest_hbgraphicsscene.exe SHARED_LIB_DIR\unittest_hbgraphicsscene.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbgraphicsscene) +S60_APP_RESOURCE(unittest_hbgraphicsscene) + +file=ABI_DIR\BUILD_DIR\unittest_hbicon.exe SHARED_LIB_DIR\unittest_hbicon.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbicon) +S60_APP_RESOURCE(unittest_hbicon) + +file=ABI_DIR\BUILD_DIR\unittest_hbiniparser.exe SHARED_LIB_DIR\unittest_hbiniparser.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbiniparser) +S60_APP_RESOURCE(unittest_hbiniparser) + +file=ABI_DIR\BUILD_DIR\unittest_hbinstance.exe SHARED_LIB_DIR\unittest_hbinstance.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbinstance) +S60_APP_RESOURCE(unittest_hbinstance) + +file=ABI_DIR\BUILD_DIR\unittest_hbsearchpanel.exe SHARED_LIB_DIR\unittest_hbsearchpanel.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbsearchpanel) +S60_APP_RESOURCE(unittest_hbsearchpanel) + +file=ABI_DIR\BUILD_DIR\unittest_hblabel.exe SHARED_LIB_DIR\unittest_hblabel.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblabel) +S60_APP_RESOURCE(unittest_hblabel) + +file=ABI_DIR\BUILD_DIR\unittest_hblistlayout.exe SHARED_LIB_DIR\unittest_hblistlayout.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblistlayout) +S60_APP_RESOURCE(unittest_hblistlayout) + +file=ABI_DIR\BUILD_DIR\unittest_hblistmodel.exe SHARED_LIB_DIR\unittest_hblistmodel.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblistmodel) +S60_APP_RESOURCE(unittest_hblistmodel) + +file=ABI_DIR\BUILD_DIR\unittest_hblistview.exe SHARED_LIB_DIR\unittest_hblistview.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblistview) +S60_APP_RESOURCE(unittest_hblistview) + +file=ABI_DIR\BUILD_DIR\unittest_hblistviewitem.exe SHARED_LIB_DIR\unittest_hblistviewitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblistviewitem) +S60_APP_RESOURCE(unittest_hblistviewitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbgridview.exe SHARED_LIB_DIR\unittest_hbgridview.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbgridview) +S60_APP_RESOURCE(unittest_hbgridview) + +file=ABI_DIR\BUILD_DIR\unittest_hbgridviewitem.exe SHARED_LIB_DIR\unittest_hbgridviewitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbgridviewitem) +S60_APP_RESOURCE(unittest_hbgridviewitem) + +file=ABI_DIR\BUILD_DIR\unittest_hblistwidget.exe SHARED_LIB_DIR\unittest_hblistwidget.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblistwidget) +S60_APP_RESOURCE(unittest_hblistwidget) + +file=ABI_DIR\BUILD_DIR\unittest_hblistwidgetitem.exe SHARED_LIB_DIR\unittest_hblistwidgetitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblistwidgetitem) +S60_APP_RESOURCE(unittest_hblistwidgetitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbmainwindow.exe SHARED_LIB_DIR\unittest_hbmainwindow.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbmainwindow) +S60_APP_RESOURCE(unittest_hbmainwindow) + +file=ABI_DIR\BUILD_DIR\unittest_hbmenu.exe SHARED_LIB_DIR\unittest_hbmenu.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbmenu) +S60_APP_RESOURCE(unittest_hbmenu) + +file=ABI_DIR\BUILD_DIR\unittest_hbmenuitem.exe SHARED_LIB_DIR\unittest_hbmenuitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbmenuitem) +S60_APP_RESOURCE(unittest_hbmenuitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbdockwidget.exe SHARED_LIB_DIR\unittest_hbdockwidget.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdockwidget) +S60_APP_RESOURCE(unittest_hbdockwidget) + +file=ABI_DIR\BUILD_DIR\unittest_hbprogressslider.exe SHARED_LIB_DIR\unittest_hbprogressslider.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbprogressslider) +S60_APP_RESOURCE(unittest_hbprogressslider) + +file=ABI_DIR\BUILD_DIR\unittest_hbprogressbar.exe SHARED_LIB_DIR\unittest_hbprogressbar.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbprogressbar) +S60_APP_RESOURCE(unittest_hbprogressbar) + +file=ABI_DIR\BUILD_DIR\unittest_hbtumbleview.exe SHARED_LIB_DIR\unittest_hbtumbleview.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtumbleview) +S60_APP_RESOURCE(unittest_hbtumbleview) + +file=ABI_DIR\BUILD_DIR\unittest_hbdatetimepicker.exe SHARED_LIB_DIR\unittest_hbdatetimepicker.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdatetimepicker) +S60_APP_RESOURCE(unittest_hbdatetimepicker) + +file=ABI_DIR\BUILD_DIR\unittest_hbratingslider.exe SHARED_LIB_DIR\unittest_hbratingslider.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbratingslider) +S60_APP_RESOURCE(unittest_hbratingslider) + +file=ABI_DIR\BUILD_DIR\unittest_hbinputdialog.exe SHARED_LIB_DIR\unittest_hbinputdialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbinputdialog) +S60_APP_RESOURCE(unittest_hbinputdialog) + +file=ABI_DIR\BUILD_DIR\unittest_hbmessagebox.exe SHARED_LIB_DIR\unittest_hbmessagebox.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbmessagebox) +S60_APP_RESOURCE(unittest_hbmessagebox) + +file=ABI_DIR\BUILD_DIR\unittest_hbpushbutton.exe SHARED_LIB_DIR\unittest_hbpushbutton.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbpushbutton) +S60_APP_RESOURCE(unittest_hbpushbutton) + +file=ABI_DIR\BUILD_DIR\unittest_hbscrollbar.exe SHARED_LIB_DIR\unittest_hbscrollbar.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbscrollbar) +S60_APP_RESOURCE(unittest_hbscrollbar) + +file=ABI_DIR\BUILD_DIR\unittest_hbslider.exe SHARED_LIB_DIR\unittest_hbslider.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbslider) +S60_APP_RESOURCE(unittest_hbslider) + +file=ABI_DIR\BUILD_DIR\unittest_hbstackedlayout.exe SHARED_LIB_DIR\unittest_hbstackedlayout.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbstackedlayout) +S60_APP_RESOURCE(unittest_hbstackedlayout) + +file=ABI_DIR\BUILD_DIR\unittest_hbstackedwidget.exe SHARED_LIB_DIR\unittest_hbstackedwidget.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbstackedwidget) +S60_APP_RESOURCE(unittest_hbstackedwidget) + +file=ABI_DIR\BUILD_DIR\unittest_hbtitlepane.exe SHARED_LIB_DIR\unittest_hbtitlepane.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtitlepane) +S60_APP_RESOURCE(unittest_hbtitlepane) + +file=ABI_DIR\BUILD_DIR\unittest_hbtoolbar.exe SHARED_LIB_DIR\unittest_hbtoolbar.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtoolbar) +S60_APP_RESOURCE(unittest_hbtoolbar) + +file=ABI_DIR\BUILD_DIR\unittest_hbtoolbarextension.exe SHARED_LIB_DIR\unittest_hbtoolbarextension.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtoolbarextension) +S60_APP_RESOURCE(unittest_hbtoolbarextension) + +file=ABI_DIR\BUILD_DIR\unittest_hbview.exe SHARED_LIB_DIR\unittest_hbview.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbview) +S60_APP_RESOURCE(unittest_hbview) + +file=ABI_DIR\BUILD_DIR\unittest_hblineedit.exe SHARED_LIB_DIR\unittest_hblineedit.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblineedit) +S60_APP_RESOURCE(unittest_hblineedit) + +file=ABI_DIR\BUILD_DIR\unittest_hbabstractedit.exe SHARED_LIB_DIR\unittest_hbabstractedit.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbabstractedit) +S60_APP_RESOURCE(unittest_hbabstractedit) + +file=ABI_DIR\BUILD_DIR\unittest_hbtextedit.exe SHARED_LIB_DIR\unittest_hbtextedit.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtextedit) +S60_APP_RESOURCE(unittest_hbtextedit) + +file=ABI_DIR\BUILD_DIR\unittest_hbevent.exe SHARED_LIB_DIR\unittest_hbevent.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbevent) +S60_APP_RESOURCE(unittest_hbevent) + +file=ABI_DIR\BUILD_DIR\unittest_hbtoolbutton.exe SHARED_LIB_DIR\unittest_hbtoolbutton.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtoolbutton) +S60_APP_RESOURCE(unittest_hbtoolbutton) + +file=ABI_DIR\BUILD_DIR\unittest_hbbatteryindicator.exe SHARED_LIB_DIR\unittest_hbbatteryindicator.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbbatteryindicator) +S60_APP_RESOURCE(unittest_hbbatteryindicator) + +file=ABI_DIR\BUILD_DIR\unittest_hbdecorator.exe SHARED_LIB_DIR\unittest_hbdecorator.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdecorator) +S60_APP_RESOURCE(unittest_hbdecorator) + +file=ABI_DIR\BUILD_DIR\unittest_hbindicatorgroup.exe SHARED_LIB_DIR\unittest_hbindicatorgroup.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbindicatorgroup) +S60_APP_RESOURCE(unittest_hbindicatorgroup) + +file=ABI_DIR\BUILD_DIR\unittest_hbsignalindicator.exe SHARED_LIB_DIR\unittest_hbsignalindicator.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbsignalindicator) +S60_APP_RESOURCE(unittest_hbsignalindicator) + +file=ABI_DIR\BUILD_DIR\unittest_hbwidget.exe SHARED_LIB_DIR\unittest_hbwidget.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbwidget) +S60_APP_RESOURCE(unittest_hbwidget) + +file=ABI_DIR\BUILD_DIR\unittest_hbbackgrounditem.exe SHARED_LIB_DIR\unittest_hbbackgrounditem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbbackgrounditem) +S60_APP_RESOURCE(unittest_hbbackgrounditem) + +file=ABI_DIR\BUILD_DIR\unittest_hbslidercontrol.exe SHARED_LIB_DIR\unittest_hbslidercontrol.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbslidercontrol) +S60_APP_RESOURCE(unittest_hbslidercontrol) + +file=ABI_DIR\BUILD_DIR\unittest_hbsliderhandle.exe SHARED_LIB_DIR\unittest_hbsliderhandle.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbsliderhandle) +S60_APP_RESOURCE(unittest_hbsliderhandle) + +file=ABI_DIR\BUILD_DIR\unittest_hbgroupbox.exe SHARED_LIB_DIR\unittest_hbgroupbox.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbgroupbox) +S60_APP_RESOURCE(unittest_hbgroupbox) + +//This is HbStyle +file=ABI_DIR\BUILD_DIR\unittest_hbstyle.exe SHARED_LIB_DIR\unittest_hbstyle.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbstyle) +S60_APP_RESOURCE(unittest_hbstyle) +file=ABI_DIR\BUILD_DIR\knobwidgetstyleplugin.dll SHARED_LIB_DIR\knobwidgetstyleplugin.dll UNPAGED +file=ABI_DIR\BUILD_DIR\knobwidgetstyleplugin2.dll SHARED_LIB_DIR\knobwidgetstyleplugin2.dll UNPAGED + +file=ABI_DIR\BUILD_DIR\unittest_hbtooltip.exe SHARED_LIB_DIR\unittest_hbtooltip.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtooltip) +S60_APP_RESOURCE(unittest_hbtooltip) + +file=ABI_DIR\BUILD_DIR\unittest_hbiconitem.exe SHARED_LIB_DIR\unittest_hbiconitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbiconitem) +S60_APP_RESOURCE(unittest_hbiconitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbfont.exe SHARED_LIB_DIR\unittest_hbfont.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfont) +S60_APP_RESOURCE(unittest_hbfont) + +file=ABI_DIR\BUILD_DIR\unittest_hbcss.exe SHARED_LIB_DIR\unittest_hbcss.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcss) +S60_APP_RESOURCE(unittest_hbcss) + +file=ABI_DIR\BUILD_DIR\unittest_hbtextutils.exe SHARED_LIB_DIR\unittest_hbtextutils.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtextutils) +S60_APP_RESOURCE(unittest_hbtextutils) + +file=ABI_DIR\BUILD_DIR\unittest_hbradiobuttonlist.exe SHARED_LIB_DIR\unittest_hbradiobuttonlist.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbradiobuttonlist) +S60_APP_RESOURCE(unittest_hbradiobuttonlist) + +file=ABI_DIR\BUILD_DIR\unittest_hbcheckbox.exe SHARED_LIB_DIR\unittest_hbcheckbox.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcheckbox) +S60_APP_RESOURCE(unittest_hbcheckbox) + +file=ABI_DIR\BUILD_DIR\unittest_hbzoomsliderpopup.exe SHARED_LIB_DIR\unittest_hbzoomsliderpopup.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbzoomsliderpopup) +S60_APP_RESOURCE(unittest_hbzoomsliderpopup) + +file=ABI_DIR\BUILD_DIR\unittest_hbzoomslider.exe SHARED_LIB_DIR\unittest_hbzoomslider.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbzoomslider) +S60_APP_RESOURCE(unittest_hbzoomslider) + +file=ABI_DIR\BUILD_DIR\unittest_hbsliderpopup.exe SHARED_LIB_DIR\unittest_hbsliderpopup.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbsliderpopup) +S60_APP_RESOURCE(unittest_hbsliderpopup) + +file=ABI_DIR\BUILD_DIR\unittest_hbvolumesliderpopup.exe SHARED_LIB_DIR\unittest_hbvolumesliderpopup.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvolumesliderpopup) +S60_APP_RESOURCE(unittest_hbvolumesliderpopup) + +file=ABI_DIR\BUILD_DIR\unittest_hbvolumeslider.exe SHARED_LIB_DIR\unittest_hbvolumeslider.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvolumeslider) +S60_APP_RESOURCE(unittest_hbvolumeslider) + +file=ABI_DIR\BUILD_DIR\unittest_hbdeviceprogressdialog.exe SHARED_LIB_DIR\unittest_hbdeviceprogressdialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdeviceprogressdialog) +S60_APP_RESOURCE(unittest_hbdeviceprogressdialog) + +file=ABI_DIR\BUILD_DIR\unittest_hbdeviceprogressdialogsymbian.exe SHARED_LIB_DIR\unittest_hbdeviceprogressdialogsymbian.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdeviceprogressdialogsymbian) +S60_APP_RESOURCE(unittest_hbdeviceprogressdialogsymbian) + +file=ABI_DIR\BUILD_DIR\unittest_hbdevicenotificationdialog.exe SHARED_LIB_DIR\unittest_hbdevicenotificationdialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdevicenotificationdialog) +S60_APP_RESOURCE(unittest_hbdevicenotificationdialog) + +file=ABI_DIR\BUILD_DIR\unittest_hbdevicenotificationdialogsymbian.exe SHARED_LIB_DIR\unittest_hbdevicenotificationdialogsymbian.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdevicenotificationdialogsymbian) +S60_APP_RESOURCE(unittest_hbdevicenotificationdialogsymbian) + +file=ABI_DIR\BUILD_DIR\unittest_hbdevicemessagebox.exe SHARED_LIB_DIR\unittest_hbdevicemessagebox.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdevicemessagebox) +S60_APP_RESOURCE(unittest_hbdevicemessagebox) + +file=ABI_DIR\BUILD_DIR\unittest_hbdevicemessageboxsymbian.exe SHARED_LIB_DIR\unittest_hbdevicemessageboxsymbian.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdevicemessageboxsymbian) +S60_APP_RESOURCE(unittest_hbdevicemessageboxsymbian) + +file=ABI_DIR\BUILD_DIR\unittest_hbcolordialog.exe SHARED_LIB_DIR\unittest_hbcolordialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcolordialog) +S60_APP_RESOURCE(unittest_hbcolordialog) + +file=ABI_DIR\BUILD_DIR\unittest_hbcombobox.exe SHARED_LIB_DIR\unittest_hbcombobox.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcombobox) +S60_APP_RESOURCE(unittest_hbcombobox) + +file=ABI_DIR\BUILD_DIR\unittest_hbnotificationdialog.exe SHARED_LIB_DIR\unittest_hbnotificationdialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbnotificationdialog) +S60_APP_RESOURCE(unittest_hbnotificationdialog) + +file=ABI_DIR\BUILD_DIR\unittest_hbtheme.exe SHARED_LIB_DIR\unittest_hbtheme.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtheme) +S60_APP_RESOURCE(unittest_hbtheme) + +file=ABI_DIR\BUILD_DIR\unittest_hbicontheme.exe SHARED_LIB_DIR\unittest_hbicontheme.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbicontheme) +S60_APP_RESOURCE(unittest_hbicontheme) + +file=ABI_DIR\BUILD_DIR\unittest_hbcolorscheme.exe SHARED_LIB_DIR\unittest_hbcolorscheme.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcolorscheme) +S60_APP_RESOURCE(unittest_hbcolorscheme) + +file=ABI_DIR\BUILD_DIR\unittest_hbcolortheme.exe SHARED_LIB_DIR\unittest_hbcolortheme.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcolortheme) +S60_APP_RESOURCE(unittest_hbcolortheme) + +file=ABI_DIR\BUILD_DIR\unittest_hbthemeutils.exe SHARED_LIB_DIR\unittest_hbthemeutils.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbthemeutils) +S60_APP_RESOURCE(unittest_hbthemeutils) + +file=ABI_DIR\BUILD_DIR\unittest_hbdataform.exe SHARED_LIB_DIR\unittest_hbdataform.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdataform) +S60_APP_RESOURCE(unittest_hbdataform) + +file=ABI_DIR\BUILD_DIR\unittest_hbdataformmodel.exe SHARED_LIB_DIR\unittest_hbdataformmodel.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdataformmodel) +S60_APP_RESOURCE(unittest_hbdataformmodel) + +file=ABI_DIR\BUILD_DIR\unittest_hbdataformmodelitem.exe SHARED_LIB_DIR\unittest_hbdataformmodelitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdataformmodelitem) +S60_APP_RESOURCE(unittest_hbdataformmodelitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbdataformviewitem.exe SHARED_LIB_DIR\unittest_hbdataformviewitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdataformviewitem) +S60_APP_RESOURCE(unittest_hbdataformviewitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbcssthemeinterface.exe SHARED_LIB_DIR\unittest_hbcssthemeinterface.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbcssthemeinterface) +S60_APP_RESOURCE(unittest_hbcssthemeinterface) + +file=ABI_DIR\BUILD_DIR\unittest_hblayeredstyleloader.exe SHARED_LIB_DIR\unittest_hblayeredstyleloader.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblayeredstyleloader) +S60_APP_RESOURCE(unittest_hblayeredstyleloader) + +file=ABI_DIR\BUILD_DIR\unittest_hbstyleloader.exe SHARED_LIB_DIR\unittest_hbstyleloader.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbstyleloader) +S60_APP_RESOURCE(unittest_hbstyleloader) + +file=ABI_DIR\BUILD_DIR\unittest_hbwidgetstyleloader.exe SHARED_LIB_DIR\unittest_hbwidgetstyleloader.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbwidgetstyleloader) +S60_APP_RESOURCE(unittest_hbwidgetstyleloader) + +file=ABI_DIR\BUILD_DIR\unittest_hbtoucharea.exe SHARED_LIB_DIR\unittest_hbtoucharea.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtoucharea) +S60_APP_RESOURCE(unittest_hbtoucharea) + +file=ABI_DIR\BUILD_DIR\unittest_hbtreeview.exe SHARED_LIB_DIR\unittest_hbtreeview.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtreeview) +S60_APP_RESOURCE(unittest_hbtreeview) + +file=ABI_DIR\BUILD_DIR\unittest_hbtreeviewitem.exe SHARED_LIB_DIR\unittest_hbtreeviewitem.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtreeviewitem) +S60_APP_RESOURCE(unittest_hbtreeviewitem) + +file=ABI_DIR\BUILD_DIR\unittest_hbindicator.exe SHARED_LIB_DIR\unittest_hbindicator.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbindicator) +S60_APP_RESOURCE(unittest_hbindicator) +file=ABI_DIR\BUILD_DIR\codesnippetplugin.dll SHARED_LIB_DIR\codesnippetplugin.dll +HB_PLUGIN_STUB(codesnippetplugin, indicators) +file=ABI_DIR\BUILD_DIR\hbfirstindicatorplugin.dll SHARED_LIB_DIR\hbfirstindicatorplugin.dll +HB_PLUGIN_STUB(hbfirstindicatorplugin, indicators) +file=ABI_DIR\BUILD_DIR\hbsecondindicatorplugin.dll SHARED_LIB_DIR\hbsecondindicatorplugin.dll +HB_PLUGIN_STUB(hbsecondindicatorplugin, indicators) + +file=ABI_DIR\BUILD_DIR\unittest_hbfeedbackplayer.exe SHARED_LIB_DIR\unittest_hbfeedbackplayer.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfeedbackplayer) +S60_APP_RESOURCE(unittest_hbfeedbackplayer) + +file=ABI_DIR\BUILD_DIR\unittest_hbfeedbackengine.exe SHARED_LIB_DIR\unittest_hbfeedbackengine.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfeedbackengine) +S60_APP_RESOURCE(unittest_hbfeedbackengine) + +file=ABI_DIR\BUILD_DIR\unittest_hbfeedbackplugingroup.exe SHARED_LIB_DIR\unittest_hbfeedbackplugingroup.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfeedbackplugingroup) +S60_APP_RESOURCE(unittest_hbfeedbackplugingroup) + +file=ABI_DIR\BUILD_DIR\unittest_hbfeedbackmanager.exe SHARED_LIB_DIR\unittest_hbfeedbackmanager.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfeedbackmanager) +S60_APP_RESOURCE(unittest_hbfeedbackmanager) + +file=ABI_DIR\BUILD_DIR\unittest_hbfeedbackplugin.exe SHARED_LIB_DIR\unittest_hbfeedbackplugin.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfeedbackplugin) +S60_APP_RESOURCE(unittest_hbfeedbackplugin) + +file=ABI_DIR\BUILD_DIR\unittest_hbfeedbackwidgetsupport.exe SHARED_LIB_DIR\unittest_hbfeedbackwidgetsupport.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfeedbackwidgetsupport) +S60_APP_RESOURCE(unittest_hbfeedbackwidgetsupport) + +file=ABI_DIR\BUILD_DIR\unittest_hbextendedlocale.exe SHARED_LIB_DIR\unittest_hbextendedlocale.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbextendedlocale) +S60_APP_RESOURCE(unittest_hbextendedlocale) + +file=ABI_DIR\BUILD_DIR\unittest_hbstringutil.exe SHARED_LIB_DIR\unittest_hbstringutil.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbstringutil) +S60_APP_RESOURCE(unittest_hbstringutil) + +file=ABI_DIR\BUILD_DIR\unittest_hbdirectorynamelocalizer.exe SHARED_LIB_DIR\unittest_hbdirectorynamelocalizer.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbdirectorynamelocalizer) +S60_APP_RESOURCE(unittest_hbdirectorynamelocalizer) + +// unittest_hbvg*effect may not be built in all configurations, they can be missing +file=ABI_DIR\BUILD_DIR\unittest_hbvgeffect.exe SHARED_LIB_DIR\unittest_hbvgeffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgeffect) +S60_APP_RESOURCE(unittest_hbvgeffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgbceffect.exe SHARED_LIB_DIR\unittest_hbvgbceffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgbceffect) +S60_APP_RESOURCE(unittest_hbvgbceffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgblureffect.exe SHARED_LIB_DIR\unittest_hbvgblureffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgblureffect) +S60_APP_RESOURCE(unittest_hbvgblureffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgchainedeffect.exe SHARED_LIB_DIR\unittest_hbvgchainedeffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgchainedeffect) +S60_APP_RESOURCE(unittest_hbvgchainedeffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgcolorizeeffect.exe SHARED_LIB_DIR\unittest_hbvgcolorizeeffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgcolorizeeffect) +S60_APP_RESOURCE(unittest_hbvgcolorizeeffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvggloweffect.exe SHARED_LIB_DIR\unittest_hbvggloweffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvggloweffect) +S60_APP_RESOURCE(unittest_hbvggloweffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvghsleffect.exe SHARED_LIB_DIR\unittest_hbvghsleffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvghsleffect) +S60_APP_RESOURCE(unittest_hbvghsleffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgoutlineeffect.exe SHARED_LIB_DIR\unittest_hbvgoutlineeffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgoutlineeffect) +S60_APP_RESOURCE(unittest_hbvgoutlineeffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgshadoweffect.exe SHARED_LIB_DIR\unittest_hbvgshadoweffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgshadoweffect) +S60_APP_RESOURCE(unittest_hbvgshadoweffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgmaskeffect.exe SHARED_LIB_DIR\unittest_hbvgmaskeffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgmaskeffect) +S60_APP_RESOURCE(unittest_hbvgmaskeffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbvgreflectioneffect.exe SHARED_LIB_DIR\unittest_hbvgreflectioneffect.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbvgreflectioneffect) +S60_APP_RESOURCE(unittest_hbvgreflectioneffect) + +file=ABI_DIR\BUILD_DIR\unittest_hbnumbergrouping.exe SHARED_LIB_DIR\unittest_hbnumbergrouping.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbnumbergrouping) +S60_APP_RESOURCE(unittest_hbnumbergrouping) + +file=ABI_DIR\BUILD_DIR\unittest_hbformatdialog.exe SHARED_LIB_DIR\unittest_hbformatdialog.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbformatdialog) +S60_APP_RESOURCE(unittest_hbformatdialog) + +file=ABI_DIR\BUILD_DIR\unittest_hbindexfeedback.exe SHARED_LIB_DIR\unittest_hbindexfeedback.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbindexfeedback) +S60_APP_RESOURCE(unittest_hbindexfeedback) + +file=ABI_DIR\BUILD_DIR\unittest_hbmemorymanager.exe SHARED_LIB_DIR\unittest_hbmemorymanager.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbmemorymanager) +S60_APP_RESOURCE(unittest_hbmemorymanager) + +file=ABI_DIR\BUILD_DIR\unittest_hbgridlayout.exe SHARED_LIB_DIR\unittest_hbgridlayout.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbgridlayout) +S60_APP_RESOURCE(unittest_hbgridlayout) + +file=ABI_DIR\BUILD_DIR\unittest_hblengthlimiter.exe SHARED_LIB_DIR\unittest_hblengthlimiter.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hblengthlimiter) +S60_APP_RESOURCE(unittest_hblengthlimiter) + +file=ABI_DIR\BUILD_DIR\unittest_hbtranslator.exe SHARED_LIB_DIR\unittest_hbtranslator.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbtranslator) +S60_APP_RESOURCE(unittest_hbtranslator) + +file=ABI_DIR\BUILD_DIR\unittest_hbfindfile.exe SHARED_LIB_DIR\unittest_hbfindfile.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbfindfile) +S60_APP_RESOURCE(unittest_hbfindfile) + +data=\epoc32\release\winscw\udeb\z\resource\qt\translations\unittest_hbtranslator_en.qm resource\qt\translations\unittest_hbtranslator_en.qm +data=\epoc32\release\winscw\udeb\z\resource\qt\translations\unittest_hbtranslator2_en.qm resource\qt\translations\unittest_hbtranslator2_en.qm +data=\epoc32\winscw\c\resource\qt\custom\unittest_hbtranslator_custom_en.qm resource\qt\custom\unittest_hbtranslator_custom_en.qm +data=\epoc32\release\winscw\udeb\z\resource\qt\translations\dummy_en.qm resource\qt\translations\dummy_en.qm +data=\epoc32\release\winscw\udeb\z\resource\qt\custom\test.txt resource\qt\custom\test.txt +data=\epoc32\winscw\c\resource\qt\custom\test2.txt resource\qt\custom\test2.txt + + +file=ABI_DIR\BUILD_DIR\unittest_hbapplication.exe SHARED_LIB_DIR\unittest_hbapplication.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbapplication) +S60_APP_RESOURCE(unittest_hbapplication) + +file=ABI_DIR\BUILD_DIR\unittest_hbactivitymanager.exe SHARED_LIB_DIR\unittest_hbactivitymanager.exe +HB_UPGRADABLE_APP_REG_RSC(unittest_hbactivitymanager) +S60_APP_RESOURCE(unittest_hbactivitymanager) + +file=ABI_DIR\BUILD_DIR\fake_hbactivityplugin.dll SHARED_LIB_DIR\fake_hbactivityplugin.dll +data=\epoc32\data\z\resource\plugins\qt\testplugins\hbactivitypluginfake.qtplugin RESOURCE_FILES_DIR\qt\plugins\testplugins\hbactivitypluginfake.qtplugin + + + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/fake_hbactivityplugin/fake_hbactivityplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/fake_hbactivityplugin/fake_hbactivityplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +TEMPLATE = lib +TARGET = hbactivityplugin + +CONFIG += plugin + +HEADERS += hbactivitypluginfake.h \ +..\..\..\..\src\hbcore\activity\hbactivityplugininterface_p.h + +SOURCES += hbactivitypluginfake.cpp + +win32 { + debug { + DESTDIR = ../unittest_hbactivitymanager/debug/testplugins + } + else { + DESTDIR = ../unittest_hbactivitymanager/release/testplugins + } +} +else { + DESTDIR = ../unittest_hbactivitymanager/testplugins +} + +symbian { + load(data_caging_paths) + pluginDep.sources = hbactivitypluginfake.dll + pluginDep.path = $$QT_PLUGINS_BASE_DIR/testplugins + DEPLOYMENT += pluginDep + + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB +} + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/fake_hbactivityplugin/hbactivitypluginfake.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/fake_hbactivityplugin/hbactivitypluginfake.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,73 @@ +#include "hbactivitypluginfake.h" + +#include + +bool HbActivityPluginFake::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + if (mActivities.contains(activityId)) { + return false; + } else { + mActivities.insert(activityId, QPair(parameters, data)); + return true; + } +} + +bool HbActivityPluginFake::removeActivity(const QString &activityId) +{ + if (mActivities.contains(activityId)) { + mActivities.remove(activityId); + return true; + } else { + return false; + } +} + +bool HbActivityPluginFake::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + if (mActivities.contains(activityId)) { + mActivities.insert(activityId, QPair(parameters, data)); + return true; + } else { + return false; + } +} + +QList HbActivityPluginFake::activities() +{ + QList result; + for (QHash >::const_iterator i = mActivities.constBegin(); i != mActivities.constEnd(); ++i) { + result.append(i->first); + } + return result; +} + +QVariant HbActivityPluginFake::activityData(const QString &activityId) +{ + if (mActivities.contains(activityId)) { + return mActivities.value(activityId).second; + } else { + return QVariant(); + } +} + +bool HbActivityPluginFake::waitActivity() +{ + if (mActivities.isEmpty()) { + return false; + } else { + emit activityRequested(mActivities.keys().first()); + return true; + } +} + +QVariantHash HbActivityPluginFake::parseCommandLine(const QStringList &commandLineParams) +{ + QVariantHash fakeActivityParameters; + if (commandLineParams.count() == 1 && commandLineParams.first() == "UnitTest") { + fakeActivityParameters.insert("activityname", "TestActivity"); + fakeActivityParameters.insert("fakeParam", "fakeValue"); + } + return fakeActivityParameters; +} + +Q_EXPORT_PLUGIN2(hbactivityplugin, HbActivityPluginFake) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/fake_hbactivityplugin/hbactivitypluginfake.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/fake_hbactivityplugin/hbactivitypluginfake.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +#ifndef HBACTIVITYPLUGINFAKE_H +#define HBACTIVITYPLUGINFAKE_H + +#include "hbactivityplugininterface_p.h" + +class HbActivityPluginFake : public HbActivityPluginInterface +{ + Q_OBJECT + Q_INTERFACES(HbActivityPluginInterface) + +public: + virtual bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + virtual bool removeActivity(const QString &activityId); + virtual bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + virtual QList activities(); + virtual QVariant activityData(const QString &activityId); + virtual bool waitActivity(); + virtual QVariantHash parseCommandLine(const QStringList &commandLineParams); + +private: + QHash > mActivities; + +}; + +#endif // HBACTIVITYPLUGINFAKE_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +# +# ============================================================================ +# Name : unittest_hbactivitymanager.pro +# Part of : LibHb / HbStyle +# Description : Project definition file for project unittest_hbactivitymanager +# Version : %version: 4 % +# +# Copyright © 2008 Nokia. All rights reserved. +# This material, including documentation and any related computer +# programs, is protected by copyright controlled by Nokia. All +# rights are reserved. Copying, including reproducing, storing, +# adapting or translating, any or all of this material requires the +# prior written consent of Nokia. This material also contains +# confidential information which may not be disclosed to others +# without the prior written consent of Nokia. +# ============================================================================ +# + +TEMPLATE = subdirs +SUBDIRS += fake_hbactivityplugin +SUBDIRS += unittest_hbactivitymanager +CONFIG += ordered + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager/unittest_hbactivitymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager/unittest_hbactivitymanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,182 @@ +/* +* ============================================================================ +* Name : unittest_hbactivitymanager.cpp +* Part of : LibHb / HbActivityManager +* Description : HbActivityManager unit tests +* Version : %version: 5 % +* +* Copyright (c) 2008-2009 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. +* ============================================================================ +*/ + +#include + +#include +#include +#include + +class TestHbActivityManager : public QObject +{ + Q_OBJECT + +public slots: + void cleanup(); + +private slots: + void testConstruction(); + void testAddActivity(); + void testRemoveActivity(); + void testActivityData(); + void testUpdateActivity(); + void testWaitActivity(); + void testActivities(); + void testCommandLineParsing(); + void testFalseAndEmptyValuesReturnedWhenPluginCannotBeLoaded(); + +}; + + +void TestHbActivityManager::cleanup() +{ + HbActivityManager manager; + manager.removeActivity("TestActivity1"); + manager.removeActivity("TestActivity2"); +} + +void TestHbActivityManager::testConstruction() +{ + HbActivityManager *manager = new HbActivityManager; + QVERIFY(manager); + delete manager; +} + +void TestHbActivityManager::testAddActivity() +{ + HbActivityManager manager; + QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash())); + // cannot add same activity twice + QVERIFY(!manager.addActivity("TestActivity1", "TestData2", QVariantHash())); +} + +void TestHbActivityManager::testRemoveActivity() +{ + HbActivityManager manager; + // activity have to be added before it's deleted + QVERIFY(!manager.removeActivity("TestActivity1")); + QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash())); + QVERIFY(manager.removeActivity("TestActivity1")); +} + +void TestHbActivityManager::testActivityData() +{ + HbActivityManager manager; + // empty data is returned for non existing activity + QCOMPARE(manager.activityData("TestActivity1"), QVariant()); + + // correct data is returned for existing activity + QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash())); + QCOMPARE(manager.activityData("TestActivity1"), QVariant("TestData")); +} + +void TestHbActivityManager::testUpdateActivity() +{ + HbActivityManager manager; + // activity have to be added before it's updated + QVERIFY(!manager.updateActivity("TestActivity1", "TestData", QVariantHash())); + + // activity can be succesfully updated + QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash())); + QCOMPARE(manager.activityData("TestActivity1"), QVariant("TestData")); + QVERIFY(manager.updateActivity("TestActivity1", "TestData2", QVariantHash())); + QCOMPARE(manager.activityData("TestActivity1"), QVariant("TestData2")); +} + +void TestHbActivityManager::testWaitActivity() +{ + HbActivityManager manager; + // mocked plugin returns false when there are no activities, so we have to add something + QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash())); + QVERIFY(manager.waitActivity()); +} + +void TestHbActivityManager::testActivities() +{ + HbActivityManager manager; + // empty list returned when there is no activities + QCOMPARE(manager.activities().count(), 0); + + QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash())); + QCOMPARE(manager.activities().count(), 1); + + QVERIFY(manager.addActivity("TestActivity2", "TestData", QVariantHash())); + QCOMPARE(manager.activities().count(), 2); +} + +void TestHbActivityManager::testCommandLineParsing() +{ + HbActivityManager manager; + // fake activity plugin returns valid fake activity when QStringList with + // single "UnitTest" QString is used as argument + + Hb::ActivationReason reason(Hb::ActivationReasonNormal); + QString id; + QVariantHash params; + + manager.parseCommandLine(QStringList(), reason, id, params); + QCOMPARE(reason, Hb::ActivationReasonNormal); + QCOMPARE(id, QString()); + QVERIFY(params.isEmpty()); + + manager.parseCommandLine(QStringList("UnitTest"), reason, id, params); + QCOMPARE(reason, Hb::ActivationReasonActivity); + QCOMPARE(id, QString("TestActivity")); + QCOMPARE(params.count(), 2); + QVERIFY(params.contains("activityname")); + QCOMPARE(params.value("activityname"), QVariant("TestActivity")); + QVERIFY(params.contains("fakeParam")); + QCOMPARE(params.value("fakeParam"), QVariant("fakeValue")); +} + +void TestHbActivityManager::testFalseAndEmptyValuesReturnedWhenPluginCannotBeLoaded() +{ + QSKIP("This test can't be performed, because the plugin path is hardcoded into HbActivityManager", SkipAll); + QVERIFY(QFile::rename("/resource/qt/plugins/hbactivityplugin.qtplugin", "/resource/qt/plugins/hbactivityplugin.tmp")); + + HbActivityManager manager; + + // every method will return false or empty value + QVERIFY(!manager.addActivity("TestActivity1", "TestData2", QVariantHash())); + QVERIFY(!manager.removeActivity("TestActivity1")); + QCOMPARE(manager.activityData("TestActivity1"), QVariant()); + QVERIFY(!manager.updateActivity("TestActivity1", "TestData", QVariantHash())); + QVERIFY(!manager.waitActivity()); + QCOMPARE(manager.activities().count(), 0); + + QVERIFY(QFile::rename("/resource/qt/plugins/hbactivityplugin.tmp", "/resource/qt/plugins/hbactivityplugin.qtplugin")); +} + +int main(int argc, char *argv[]) +{ +#if defined(Q_OS_WIN32) || defined(Q_OS_LINUX) + QCoreApplication::addLibraryPath("testplugins/"); +#elif defined(Q_OS_SYMBIAN) + QCoreApplication::addLibraryPath("/resource/qt/plugins/testplugins/"); +#endif + + HbApplication app(argc, argv); + TestHbActivityManager tc; + int ret = QTest::qExec(&tc, argc, argv); + QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection); + return ret; +} + + + +#include "unittest_hbactivitymanager.moc" diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager/unittest_hbactivitymanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager/unittest_hbactivitymanager.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# ============================================================================ +# Name : unittest_hbactivitymanager.pro +# Part of : LibHb / HbActivityManager +# Description : Project definition file for project unittest_hbactivitymanager +# Version : %version: 1 % +# +# Copyright © 2008 Nokia. All rights reserved. +# This material, including documentation and any related computer +# programs, is protected by copyright controlled by Nokia. All +# rights are reserved. Copying, including reproducing, storing, +# adapting or translating, any or all of this material requires the +# prior written consent of Nokia. This material also contains +# confidential information which may not be disclosed to others +# without the prior written consent of Nokia. +# ============================================================================ +# + +SOURCES += unittest_hbactivitymanager.cpp + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/fake_hbactivityplugin/fake_hbactivityplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/fake_hbactivityplugin/fake_hbactivityplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +TEMPLATE = lib +TARGET = hbactivityplugin + +CONFIG += plugin + +HEADERS += hbactivitypluginfake.h \ +..\..\..\..\src\hbcore\activity\hbactivityplugininterface_p.h + +SOURCES += hbactivitypluginfake.cpp + +win32 { + debug { + DESTDIR = ../unittest_hbapplication/debug/testplugins + } + else { + DESTDIR = ../unittest_hbapplication/release/testplugins + } +} +else { + DESTDIR = ../unittest_hbapplication/testplugins +} + +symbian { + load(data_caging_paths) + pluginDep.sources = hbactivitypluginfake.dll + pluginDep.path = $$QT_PLUGINS_BASE_DIR/testplugins + DEPLOYMENT += pluginDep + + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB +} + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/fake_hbactivityplugin/hbactivitypluginfake.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/fake_hbactivityplugin/hbactivitypluginfake.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,72 @@ +#include "hbactivitypluginfake.h" + +#include + +bool HbActivityPluginFake::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + if (mActivities.contains(activityId)) { + return false; + } else { + mActivities.insert(activityId, QPair(parameters, data)); + return true; + } +} + +bool HbActivityPluginFake::removeActivity(const QString &activityId) +{ + if (mActivities.contains(activityId)) { + mActivities.remove(activityId); + return true; + } else { + return false; + } +} + +bool HbActivityPluginFake::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + if (mActivities.contains(activityId)) { + mActivities.insert(activityId, QPair(parameters, data)); + return true; + } else { + return false; + } +} + +QList HbActivityPluginFake::activities() +{ + QList result; + for (QHash >::const_iterator i = mActivities.constBegin(); i != mActivities.constEnd(); ++i) { + result.append(i->first); + } + return result; +} + +QVariant HbActivityPluginFake::activityData(const QString &activityId) +{ + if (mActivities.contains(activityId)) { + return mActivities.value(activityId).second; + } else { + return QVariant(); + } +} + +bool HbActivityPluginFake::waitActivity() +{ + if (mActivities.isEmpty()) { + return false; + } else { + emit activityRequested(mActivities.keys().first()); + return true; + } +} + +QVariantHash HbActivityPluginFake::parseCommandLine(const QStringList &commandLineParams) +{ + QVariantHash fakeActivityParameters; + if (commandLineParams.count() == 1 && commandLineParams.first() == "UnitTest") { + fakeActivityParameters.insert("activityname", "TestActivity"); + fakeActivityParameters.insert("fakeParam", "fakeValue"); + } + return fakeActivityParameters; +} +Q_EXPORT_PLUGIN2(hbactivityplugin, HbActivityPluginFake) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/fake_hbactivityplugin/hbactivitypluginfake.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/fake_hbactivityplugin/hbactivitypluginfake.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +#ifndef HBACTIVITYPLUGINFAKE_H +#define HBACTIVITYPLUGINFAKE_H + +#include "hbactivityplugininterface_p.h" + +class HbActivityPluginFake : public HbActivityPluginInterface +{ + Q_OBJECT + Q_INTERFACES(HbActivityPluginInterface) + +public: + virtual bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + virtual bool removeActivity(const QString &activityId); + virtual bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + virtual QList activities(); + virtual QVariant activityData(const QString &activityId); + virtual bool waitActivity(); + virtual QVariantHash parseCommandLine(const QStringList &commandLineParams); + +private: + QHash > mActivities; + +}; + +#endif // HBACTIVITYPLUGINFAKE_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/unittest_hbapplication.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/unittest_hbapplication.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +# +# ============================================================================ +# Name : unittest_hbapplication.pro +# Part of : LibHb +# Description : Project definition file for project unittest_hbapplication +# Version : %version: 3 % +# +# Copyright © 2008 Nokia. All rights reserved. +# This material, including documentation and any related computer +# programs, is protected by copyright controlled by Nokia. All +# rights are reserved. Copying, including reproducing, storing, +# adapting or translating, any or all of this material requires the +# prior written consent of Nokia. This material also contains +# confidential information which may not be disclosed to others +# without the prior written consent of Nokia. +# ============================================================================ +# + +TEMPLATE = subdirs +SUBDIRS += fake_hbactivityplugin +SUBDIRS += unittest_hbapplication +CONFIG += ordered + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/unittest_hbapplication/unittest_hbapplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/unittest_hbapplication/unittest_hbapplication.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,106 @@ +/* +* ============================================================================ +* Name : unittest_hbapplication.cpp +* Part of : LibHb / HbApplication +* Description : HbApplication unit tests +* Version : %version: 4 % +* +* Copyright (c) 2008-2009 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. +* ============================================================================ +*/ + +#include + +#include +#include +#include + +class TestHbApplication : public QObject +{ + Q_OBJECT + +public slots: + void cleanup(); + +private slots: + void testHideSplash(); + void testActivityManager(); + void testActivityGettersForNoActivity(); + void testActivityGettersAfterActivitySignal(); + +private: + HbApplication *hbApp() {return qobject_cast(qApp);} + +}; + + +void TestHbApplication::cleanup() +{ + HbActivityManager *manager = hbApp()->activityManager(); + manager->removeActivity("TestActivity1"); +} + +void TestHbApplication::testHideSplash() +{ + HbApplication *app = static_cast(qApp); + app->hideSplash(); + app->hideSplash(); +} + +void TestHbApplication::testActivityManager() +{ + QVERIFY(hbApp()->activityManager()); +} + +void TestHbApplication::testActivityGettersForNoActivity() +{ + HbApplication *app = hbApp(); + QCOMPARE(app->activateReason(), Hb::ActivationReasonNormal); + QCOMPARE(app->activateId(), QString()); + QCOMPARE(app->activateData(), QVariant()); + QCOMPARE(app->activateParams(), QVariantHash()); +} + +void TestHbApplication::testActivityGettersAfterActivitySignal() +{ + HbApplication *app = hbApp(); + HbActivityManager *manager = app->activityManager(); + + // our fake activity manager emits the activity singal immediately + // after wait, given that there is any activity added + QVERIFY(manager->addActivity("TestActivity1", "TestData", QVariantHash())); + + QSignalSpy spy(app, SIGNAL(activate())); + QVERIFY(spy.isValid()); + + QVERIFY(manager->waitActivity()); + QCOMPARE(spy.count(), 1); + + QCOMPARE(app->activateReason(), Hb::ActivationReasonActivity); + QCOMPARE(app->activateId(), QString("TestActivity1")); + QCOMPARE(app->activateData(), QVariant("TestData")); +} + +int main(int argc, char *argv[]) +{ +#if defined(Q_OS_WIN32) || defined(Q_OS_LINUX) + QCoreApplication::addLibraryPath("testplugins/"); +#elif defined(Q_OS_SYMBIAN) + QCoreApplication::addLibraryPath("/resource/qt/plugins/testplugins/"); +#endif + + HbApplication app(argc, argv); + TestHbApplication tc; + int ret = QTest::qExec(&tc, argc, argv); + QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection); + return ret; +} + +#include "unittest_hbapplication.moc" diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/unittest_hbapplication/unittest_hbapplication.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/orbitintegration/hb/tsrc/unit/unittest_hbapplication/unittest_hbapplication/unittest_hbapplication.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# ============================================================================ +# Name : unittest_hbapplication.pro +# Part of : LibHb / HbApplication +# Description : Project definition file for project unittest_hbapplication +# Version : %version: 1 % +# +# Copyright © 2008 Nokia. All rights reserved. +# This material, including documentation and any related computer +# programs, is protected by copyright controlled by Nokia. All +# rights are reserved. Copying, including reproducing, storing, +# adapting or translating, any or all of this material requires the +# prior written consent of Nokia. This material also contains +# confidential information which may not be disclosed to others +# without the prior written consent of Nokia. +# ============================================================================ +# + +SOURCES += unittest_hbapplication.cpp + +include($${HB_SOURCE_DIR}/tsrc/hbtest.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/client/t_afstorageclient/data/image_file_activitydbclient.png Binary file activityfw/storage/client/t_afstorageclient/data/image_file_activitydbclient.png has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/client/t_afstorageclient/inc/t_activityclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/client/t_afstorageclient/inc/t_activityclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,86 @@ +/* +* 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: Test class for taskswitcher::TaskSwitcher +* +*/ + + +#include +#include "afasyncrequestobserver.h" +#include "afasyncsession.h" + +class CFbsBitmap; + +/** +* @test Test class +*/ +class T_ActivityClient : public QObject, + public MAfAsyncSession, + public MAfAsyncRequestObserver +{ + Q_OBJECT +public: + T_ActivityClient(); + ~T_ActivityClient(); + +public: //MAfAsyncRequestObserver + void waitActivityRequestCompleted(int result, + const TDesC8 &data); + + void getThumbnailRequestCompleted(int result, + int bitmapHandle, + void* userData); + + void dataChangeNotificationCompleted(int result); + +public: //MAfAsyncSession + void PushL(CBase* asyncTask); + void Pop(CBase* asyncTask); + void executeL(int function); + void sendAsync(int function, const TIpcArgs &args, TRequestStatus& status); + void getDataL(int id, TDes8& buffer); + +private slots: + void initTestCase(); + void cleanupTestCase(); + + void testEntry(); + void testAsyncRequest(); + void testCreateClient(); + void testAddActivity(); + void testUpdateActivity(); + void testSaveActivity(); + void testRemoveActivity(); + void testRemoveApplicationActivities(); + void testActivities(); + void testApplicationActivities(); + void testGetData(); + void testWaitLaunchActivity(); + void testGetThumbnail(); + +private: + CFbsBitmap *mBitmap; + + HBufC *mData; + + TInt mScreenshotHandle; + CFbsBitmap *mScreenshot; + + CBase *mRunningTask; + void *mUserData; + int mExpectedResponse; + int mRealResponse; + QEventLoop mLoop; + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/client/t_afstorageclient/src/t_activityclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/client/t_afstorageclient/src/t_activityclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,552 @@ +/* +* 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: Main test class for hsutils library. +* +*/ + +#include "t_activityclient.h" + +#include +#include + +#include +#include + +#include + +#include +#include + +#include "afasyncrequest_p.h" +#include "afthumbnailrequest_p.h" +#include "afstorageclient.h" + +_LIT(KActivityName, "ActivityName"); + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +T_ActivityClient::T_ActivityClient() : mBitmap(0), mData(0), mRunningTask(0), mScreenshot(0), mUserData(0) +{ +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +T_ActivityClient::~T_ActivityClient() +{ + delete mData; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::initTestCase() +{ + QPixmap screenshot(20, 20); + { + QPainter painter(&screenshot); + painter.setBrush(Qt::black); + painter.drawRect(screenshot.rect()); + painter.setBrush(QColor::fromHsv(255, 255, 255)); + painter.drawEllipse(screenshot.rect()); + } + + QScopedPointer bitmap(screenshot.toSymbianCFbsBitmap()); + + mBitmap = new CFbsBitmap(); + QCOMPARE(mBitmap->Duplicate(bitmap->Handle()), KErrNone); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::cleanupTestCase() +{ + delete mBitmap; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::waitActivityRequestCompleted(int result, + const TDesC8 &data) +{ + if (mData) { + delete mData; + } + RBuf converter; + converter.CreateMaxL(data.Length()); + converter.Copy(data); + mData = converter.Alloc(); + converter.Close(); + + mRealResponse = result; + + if(mLoop.isRunning()) { + mLoop.exit(); + } +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::getThumbnailRequestCompleted(int result, + int bitmapHandle, + void* userData) +{ + mScreenshotHandle = bitmapHandle; + mScreenshot = new CFbsBitmap(); + mScreenshot->Duplicate(mScreenshotHandle); + mUserData = userData; + + mRealResponse = result; + if(mLoop.isRunning()) { + mLoop.exit(); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::dataChangeNotificationCompleted(int result) +{ + mRealResponse = result; + if(mLoop.isRunning()) { + mLoop.exit(); + } +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::PushL(CBase* asyncTask) +{ + mRunningTask = asyncTask; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::Pop(CBase* asyncTask) +{ + Q_UNUSED(asyncTask); + mRunningTask = 0; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::executeL(int function) +{ + Q_UNUSED(function); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::sendAsync(int function, const TIpcArgs &args, TRequestStatus& status) +{ + Q_UNUSED(function); + Q_UNUSED(args); + TRequestStatus *requestStatus(&status); + User::RequestComplete(requestStatus, mExpectedResponse); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::getDataL(int id, TDes8& buffer) +{ + Q_UNUSED(id); + Q_UNUSED(buffer); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testEntry() +{ + const TInt KActivityFlags(qHash("Some activity flags")); + const TInt KApplicationId(qHash("Some application id")); + _LIT(KActivityId, "Some activity id"); + _LIT(KActivityThumnail, "s:\\ome\\activity\\img.png"); + _LIT8(KPrivateData, "Some private data"); + _LIT8(KPublicData, "Some public data"); + + struct TestDataSet{ + TInt mFlags; + TInt mAppId; + const TDesC& mActId; + const TDesC& mImgPath; + const TDesC8& mPriv; + const TDesC8& mPub; + } testData [] = {{KActivityFlags, KApplicationId, KActivityId(), KActivityThumnail(), KPrivateData(), KPublicData()}, + {KActivityFlags, KApplicationId, KNullDesC, KActivityThumnail(), KPrivateData(), KPublicData()}, + {KActivityFlags, KApplicationId, KActivityId(), KNullDesC, KPrivateData(), KPublicData()}, + {KActivityFlags, KApplicationId, KActivityId(), KActivityThumnail(), KNullDesC8, KPublicData()}, + {KActivityFlags, KApplicationId, KActivityId(), KActivityThumnail(), KPrivateData(), KNullDesC8()}}; + const int count(sizeof(testData) / sizeof(TestDataSet)); + CAfEntry * entry(0); + RBuf8 serializedEntry; + CleanupClosePushL(serializedEntry); + for (int i(0); i < count; ++i) { + entry = CAfEntry::NewL(testData[i].mFlags, + testData[i].mAppId, + testData[i].mActId, + testData[i].mImgPath, + testData[i].mPriv, + testData[i].mPub); + CleanupStack::PushL(entry); + + QVERIFY(entry->Flags() == testData[i].mFlags); + QVERIFY(entry->ApplicationId() == testData[i].mAppId); + QVERIFY(0 == entry->ActivityId().Compare(testData[i].mActId)); + QVERIFY(0 == entry->ImageSrc().Compare(testData[i].mImgPath)); + QVERIFY(0 == entry->Data(CAfEntry::Private).Compare(testData[i].mPriv)); + QVERIFY(0 == entry->Data(CAfEntry::Public).Compare(testData[i].mPub)); + + if(serializedEntry.MaxLength() < entry->Size()) { + serializedEntry.ReAllocL(entry->Size()); + } + RDesWriteStream writer(serializedEntry); + CleanupClosePushL(writer); + writer << (*entry); + CleanupStack::PopAndDestroy(&writer); + CleanupStack::PopAndDestroy(entry); + + entry = CAfEntry::NewL(); + CleanupStack::PushL(entry); + + RDesReadStream reader(serializedEntry); + CleanupClosePushL(reader); + reader >> (*entry); + CleanupStack::PopAndDestroy(&reader); + + QVERIFY(entry->Flags() == testData[i].mFlags); + QVERIFY(entry->ApplicationId() == testData[i].mAppId); + QVERIFY(0 == entry->ActivityId().Compare(testData[i].mActId)); + QVERIFY(0 == entry->ImageSrc().Compare(testData[i].mImgPath)); + QVERIFY(0 == entry->Data(CAfEntry::Private).Compare(testData[i].mPriv)); + QVERIFY(0 == entry->Data(CAfEntry::Public).Compare(testData[i].mPub)); + + CleanupStack::PopAndDestroy(entry); + } + CleanupStack::PopAndDestroy(&serializedEntry); +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testAsyncRequest() +{ + mExpectedResponse = KErrNone; + CAfAsyncRequestPrivate::NewLD(*this, *this, WaitActivity); + mLoop.exec(); + QVERIFY(mExpectedResponse == mRealResponse); + QVERIFY(0 == mRunningTask); + + mExpectedResponse = KErrGeneral; + CAfAsyncRequestPrivate::NewLD(*this, *this, WaitActivity); + mLoop.exec(); + QVERIFY(mExpectedResponse == mRealResponse); + QVERIFY(0 == mRunningTask); + + mExpectedResponse = KErrNone; + CAfAsyncRequestPrivate::NewLD(*this, *this, NotifyChange); + mLoop.exec(); + QVERIFY(mExpectedResponse == mRealResponse); + QVERIFY(0 == mRunningTask); + + mExpectedResponse = KErrGeneral; + CAfAsyncRequestPrivate::NewLD(*this, *this, NotifyChange); + mLoop.exec(); + QVERIFY(mExpectedResponse == mRealResponse); + QVERIFY(0 == mRunningTask); + + + mExpectedResponse = KErrGeneral; + CAfThumbnailRequestPrivate::NewLD(*this, *this, TSize(), _L("f://ake//path.mif"), 0); + mLoop.exec(); + QVERIFY(mExpectedResponse == mRealResponse); + QVERIFY(0 == mRunningTask); + + mExpectedResponse = KErrNone; + CAfThumbnailRequestPrivate::NewLD(*this, *this, TSize(), _L("f://ake//path.mif"), 0); + mLoop.exec(); + QVERIFY(mExpectedResponse == mRealResponse); + QVERIFY(0 == mRunningTask); + +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testCreateClient() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testAddActivity() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + + QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle())); + QVERIFY(KErrNone != client->addActivity(*entry.data(), mBitmap->Handle())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testUpdateActivity() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + client->addActivity(*entry.data(), mBitmap->Handle()); + + QVERIFY(KErrNone == client->updateActivity(*entry.data(), mBitmap->Handle())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testSaveActivity() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + QVERIFY(KErrNone == client->saveActivity(*entry.data(), mBitmap->Handle())); + QVERIFY(KErrNone == client->saveActivity(*entry.data(), mBitmap->Handle())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testRemoveActivity() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + client->addActivity(*entry.data(), mBitmap->Handle()); + + QVERIFY(KErrNone == client->removeActivity(*entry.data())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testRemoveApplicationActivities() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + client->addActivity(*entry.data(), mBitmap->Handle()); + + QVERIFY(KErrNone == client->removeApplicationActivities(*entry.data())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testActivities() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + + int activityCountBeforeAdding, activityCountAfterAdding; + { + RPointerArray results; + int callResult = client->activities(results); + activityCountBeforeAdding = results.Count(); + results.ResetAndDestroy(); + + QVERIFY(KErrNone == callResult); + } + + QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle())); + + { + RPointerArray results; + int callResult = client->activities(results); + activityCountAfterAdding = results.Count(); + results.ResetAndDestroy(); + + QVERIFY(KErrNone == callResult); + } + + QCOMPARE(activityCountAfterAdding, activityCountBeforeAdding + 1); + + client->removeActivity(*entry.data()); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testApplicationActivities() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + QVERIFY(KErrNone == client->removeApplicationActivities(*entry.data())); + + const QString expectedActivityName("ActivityName%1"); + const int activityCount(20); + + { + RPointerArray results; + int callResult = client->applicationActivities(results, *entry.data()); + int resultCount = results.Count(); + results.ResetAndDestroy(); + + QVERIFY(KErrNone == callResult); + QCOMPARE(resultCount, 0); + } + + for (int i=0; i < activityCount; ++i) { + QScopedPointer activityName(XQConversions::qStringToS60Desc(QString(expectedActivityName).arg(i))); + QScopedPointer entry(CAfEntry::NewL(0, 1, *activityName.data(), KNullDesC(), KNullDesC8(), KNullDesC8())); + client->addActivity(*entry.data(), mBitmap->Handle()); + } + + { + RPointerArray results; + int callResult = client->applicationActivities(results, *entry.data()); + int resultCount = results.Count(); + results.ResetAndDestroy(); + + QVERIFY(KErrNone == callResult); + QCOMPARE(resultCount, activityCount); + } + + QVERIFY(KErrNone == client->removeApplicationActivities(*entry.data())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testGetData() +{ + _LIT8(KPrivateData, "My private data"); + _LIT8(KPublicData, "My public data"); + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KPrivateData(), KPublicData())); + + client->removeActivity(*entry.data()); + QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle())); + + CAfEntry *result(0); + QVERIFY(0 == client->activityData(result, *entry.data())); + + QScopedPointer guardedResult(result); + QVERIFY(0 == guardedResult->Data(CAfEntry::Private).Compare(KPrivateData())); + QVERIFY(0 == guardedResult->Data(CAfEntry::Public).Compare(KPublicData())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testWaitLaunchActivity() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer launcher(CAfStorageClient::NewL(*this)); + + QScopedPointer entry(CAfEntry::NewL(0, RProcess().SecureId().iId, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + QVERIFY(KErrNone == client->waitActivity()); + QVERIFY(KErrNone == launcher->launchActivity(*entry.data())); + mLoop.exec(); + + QVERIFY(mData); + QVERIFY(0 == mData->Compare(KActivityName())); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_ActivityClient::testGetThumbnail() +{ + QScopedPointer client(CAfStorageClient::NewL(*this)); + QScopedPointer entry(CAfEntry::NewL(0, RProcess().SecureId().iId, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8())); + + client->removeActivity(*entry.data()); + QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle())); + + RPointerArray results; + QVERIFY(KErrNone == client->activities(results)); + + QTimer timeout; + timeout.setSingleShot(true); + timeout.setInterval(5000); + mLoop.connect(&timeout, SIGNAL(timeout()), SLOT(quit())); + + for (int iter=0; iter < results.Count(); ++iter) { + //valid thumbnail + QVERIFY(KErrNone == client->getThumbnail(TSize(50, 10), results[iter]->ImageSrc(), this)); + timeout.start(); + mLoop.exec(); + QVERIFY(timeout.isActive()); + timeout.stop(); + + QVERIFY(mScreenshotHandle >= 0); + { + QScopedPointer bitmap(new CFbsBitmap()); + QCOMPARE(bitmap->Duplicate(mScreenshotHandle), KErrNone); + TSize bitmapSize = bitmap->SizeInPixels(); + QVERIFY(50 >= bitmapSize.iWidth); + QVERIFY(10 >= bitmapSize.iHeight); + delete mScreenshot; + mScreenshot = 0; + } + QVERIFY(this == mUserData); + + //invalid width + QVERIFY(KErrNone == client->getThumbnail(TSize(0, 10), results[iter]->ImageSrc(), this)); + timeout.start(); + mLoop.exec(); + QVERIFY(timeout.isActive()); + timeout.stop(); + QVERIFY(mScreenshotHandle < 0); + QVERIFY(this == mUserData); + + //invalid height + QVERIFY(KErrNone == client->getThumbnail(TSize(50, 0), results[iter]->ImageSrc(), this)); + timeout.start(); + mLoop.exec(); + QVERIFY(timeout.isActive()); + timeout.stop(); + QVERIFY(mScreenshotHandle < 0); + QVERIFY(this == mUserData); + + //invalid thumbnail + QVERIFY(KErrNone == client->getThumbnail(TSize(50, 10), _L("s:/ome/fake/path.mbm"), this)); + timeout.start(); + mLoop.exec(); + QVERIFY(timeout.isActive()); + timeout.stop(); + QVERIFY(mScreenshotHandle < 0); + QVERIFY(this == mUserData); + } + results.ResetAndDestroy(); +} + +QTEST_MAIN(T_ActivityClient) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/client/t_afstorageclient/t_afstorageclient.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/client/t_afstorageclient/t_afstorageclient.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,69 @@ +# +# 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: +# + +TEMPLATE = app + +coverage:DEFINES += COVERAGE_MEASUREMENT + +CONFIG += console + +QT += testlib + +DEPENDPATH += .\ + ./src + +INCLUDEPATH += .\ + ./inc \ + ../../inc \ + +HEADERS += ../inc/afstorageclient.h \ + ../inc/afasyncrequestobserver.h \ + ../inc/afasyncrequest_p.h \ + ../inc/afasyncsession.h \ + ../inc/afstorageclientimp.h \ + ../inc/afstorageclient_p.h \ + ../inc/afthumbnailrequest_p.h \ + +SOURCES += ../src/afstorageclient.cpp \ + ../src/afasyncrequest_p.cpp \ + ../src/afstorageclientimp.cpp \ + ../src/afstorageclient_p.cpp \ + ../src/afthumbnailrequest_p.cpp \ + +HEADERS += ./inc/t_activityclient.h +SOURCES += ./src/t_activityclient.cpp + +DEFINES += ACTIVITY_LIB + +symbian: { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0xEfb7dc67 + TARGET.CAPABILITY = CAP_APPLICATION AllFiles + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + export.sources = ./data/image_file_activitydbclient.png + export.path = c:/data/Images/Pictures/ + DEPLOYMENT += export + + LIBS += -lxqutils \ + -lestor \ + -lfbscli \ + -lafstoragecommon.lib \ + +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/data/armv5/Hello.jar Binary file activityfw/storage/server/tsrc/t_server/data/armv5/Hello.jar has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX Binary file activityfw/storage/server/tsrc/t_server/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/data/winscw/Hello.jar Binary file activityfw/storage/server/tsrc/t_server/data/winscw/Hello.jar has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx Binary file activityfw/storage/server/tsrc/t_server/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/t_installer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/server/tsrc/t_server/t_installer.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2010 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: ?Description + * + */ + +#include +#include + +#include "t_installer.h" + +using namespace Usif; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// T_CaInstaller::~T_CaInstaller +// --------------------------------------------------------------------------- +// +T_Installer::~T_Installer() + { + Cancel(); + //iFs.Close(); + delete iArguments; + delete iResults; + iInstaller.Close(); + iSoftwareRegistry.Close(); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::NewL +// --------------------------------------------------------------------------- +// +T_Installer *T_Installer::NewL(TInt aPriority) + { + T_Installer *self = new (ELeave) T_Installer( + aPriority ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::T_CaInstaller +// --------------------------------------------------------------------------- +// +T_Installer::T_Installer( TInt aPriority ) : + CActive( aPriority ), iInstaller() + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::ConstructL +// --------------------------------------------------------------------------- +// +void T_Installer::ConstructL() + { + iArguments = COpaqueNamedParams::NewL(); + iResults = COpaqueNamedParams::NewL(); + + iArguments->AddIntL( KSifInParam_InstallInactive, ETrue ); + iArguments->AddIntL( KSifInParam_InstallSilently, ETrue ); + + User::LeaveIfError( iInstaller.Connect() ); + User::LeaveIfError( iSoftwareRegistry.Connect() ); + //User::LeaveIfError( iFs.Connect() ); + } + +// --------------------------------------------------------------------------- +// T_CaInstallOperation::ConstructL +// --------------------------------------------------------------------------- +// +void T_Installer::InstallL( const TDesC& aFileName ) + { + if (IsActive()) + { + User::Leave(KErrInUse); + } + + iInstaller.Install( aFileName, *iArguments, *iResults, iStatus ); + SetActive(); + iSchedulerWait.Start(); + User::LeaveIfError(iStatus.Int()); + + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::UnistallL +// --------------------------------------------------------------------------- +// +void T_Installer::UninstallL(TComponentId aComponentId) + { + if (IsActive()) + { + User::Leave( KErrInUse ); + } + + if (aComponentId >= 1) + { + iInstaller.Uninstall( aComponentId, *iArguments, *iResults, iStatus ); + SetActive(); + iSchedulerWait.Start(); + User::LeaveIfError(iStatus.Int()); + } + + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::UnistallL +// --------------------------------------------------------------------------- +// +void T_Installer::UninstallL(const TDesC& aFileName) + { + UninstallL( GetComponentIdL(aFileName) ); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::UnistallL +// --------------------------------------------------------------------------- +// +void T_Installer::UninstallL( TUint32 aUid ) + { + UninstallL( GetComponentIdL( aUid ) ); + } + +TComponentId T_Installer::GetComponentIdL( const TDesC& aFileName ) + { + CComponentFilter* const fileNameFilter = CComponentFilter::NewLC(); + fileNameFilter->SetFileL( aFileName ); + + RArray componentIds; + CleanupClosePushL( componentIds ); + iSoftwareRegistry.GetComponentIdsL( componentIds, fileNameFilter ); + + TComponentId componentId( 0 ); + + if ( componentIds.Count() == 1 ) + { + componentId = componentIds[0]; + } + else if ( componentIds.Count() >= 2 ) + { + User::Leave( KErrGeneral ); + } + + CleanupStack::PopAndDestroy( &componentIds ); + CleanupStack::PopAndDestroy( fileNameFilter ); + + return componentId; + } + + +TComponentId T_Installer::GetComponentIdL( TInt32 aUid ) + { + TUid uid; + TComponentId componentId = iSoftwareRegistry.GetComponentIdForAppL( + uid.Uid( aUid ) );; + + if ( componentId <= 0 ) + { + User::Leave( KErrGeneral ); + } + return componentId; + } +// --------------------------------------------------------------------------- +// T_CaInstaller::RunL +// --------------------------------------------------------------------------- +// +void T_Installer::RunL() + { + iSchedulerWait.AsyncStop(); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::DoCancel +// --------------------------------------------------------------------------- +// +void T_Installer::DoCancel() + { + iInstaller.CancelOperation(); + iSchedulerWait.AsyncStop(); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::RunError +// --------------------------------------------------------------------------- +// +TInt T_Installer::RunError(TInt /*aError*/) + { + return KErrNone; + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/t_installer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/server/tsrc/t_server/t_installer.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2010 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: ?Description + * + */ + +#ifndef T_CA_INSTALLER_H +#define T_CA_INSTALLER_H + +#include +#include +#include +#include + +/** + * Installer + * + */ +NONSHARABLE_CLASS(T_Installer): public CActive { + +public: + /** + * Destructor + */ + virtual ~T_Installer(); + + /** + * Two-phased constructor. Leaves on failure. + * Allocates memory for and constructs an uninstaller object. After that + * starts asynchronous uninnstallation of the requested entry + * @param aFileName name of the file to be installed + * @param aPriority priority of the active scheduler responsible for handling + * asynchronous installation operation + * @return The constructed object. + */ + static T_Installer *NewL( TInt aPriority = CActive::EPriorityStandard ); + + /** + * Starts asynchronous installation operation + * @param aFileName name of the file to be installed + * @param aComponentId placeholder for component id of the package after + * instalation is completed. + */ + void InstallL(const TDesC& aFileName); + /** + * Uninstall operation + * @param aComponentId id of the component to be installed. + */ + void UninstallL( Usif::TComponentId aComponentId ); + + /** + * Uninstall operation for package(s) based on filename + * for native and HS widgets. + * @param aFileName the file name installed with the package(s) + */ + void UninstallL( const TDesC& aFileName ); + + /** + * Uninstall operation for java applications + * @param aUid ui + */ + void UninstallL(TUint32 aUid); + + /** + * Find component id for a file name + * @param aFileName the file name installed with the package(s) + * @return componentId for a requested file name + */ + Usif::TComponentId GetComponentIdL( const TDesC& aFileName ); + + /** + * Find component id for a uid + * @param aUid ui + * @return componentId for a requested uid + */ + Usif::TComponentId GetComponentIdL( TInt32 aUid ); +private: + // construction + /** + * Constructor. + * Starts active scheduler. + * @param aPriority priority of the active scheduler responsible for handling + * asynchronous installation operation + */ + T_Installer(TInt aPriority); + + /** + * Initializes the object and starts asynchronous uninstallation process. + */ + void ConstructL(); + + + +private: + // from CActive + + void RunL(); + void DoCancel(); + TInt RunError( TInt aError ); + +private: + Usif::COpaqueNamedParams* iArguments; + Usif::COpaqueNamedParams* iResults; + // RFs iFs; + Usif::RSoftwareInstall iInstaller; + Usif::RSoftwareComponentRegistry iSoftwareRegistry; + CActiveSchedulerWait iSchedulerWait; +}; + +#endif // T_CA_INSTALLER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/t_server.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/server/tsrc/t_server/t_server.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,178 @@ +//Copyright (c) 2010 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: + +///////////////////////////////////////////////////////////////////// + +// INCLUDED FILES +#include +#include +#include "t_server.h" +#include "t_installer.h" +#include "afserver.h" +#include "afstorage.h" +#include "afapplicationsmonitor.h" +#include "afapplicationscollection.h" +#include "afapplicationsengine.h" + +_LIT(KSisPackageFileName,"c:\\sapiapp_S60_3_X_v_1_0_0.sisx"); +_LIT(KSisAppFileName, "c:\\sys\\bin\\sapiapp.exe"); +const TUid KSisAppUid(TUid::Uid(0xe6bc1167)); + + +void T_Server::testStorage() +{ + _LIT(KDbName, "activity.db"); + _LIT(KDbDrive, "c:"); + + RFs fileSession; + CleanupClosePushL(fileSession); + fileSession.Connect(); + + //remove database if exists + RBuf path; + CleanupClosePushL( path ); + path.CreateL(256); + User::LeaveIfError(fileSession.PrivatePath(path )); + path.Append(KDbName); + path.Insert(0, KDbDrive); + BaflUtils::EnsurePathExistsL(fileSession, path); + if(BaflUtils::FileExists(fileSession, path)) { + fileSession.Delete(path); + } + CleanupStack::PopAndDestroy(&path); + + + //create storage when database doesnt exists + CAfStorage* storage = CAfStorage::NewL(fileSession); + delete storage; + + //create storage when database already exists + storage = CAfStorage::NewL(fileSession); + delete storage; + + CleanupStack::PopAndDestroy(&fileSession); +} + +void T_Server::testMonitor() +{ + TInt errNo; + RApaLsSession session; + QVERIFY(KErrNone == session.Connect()); + CAfApplicationsMonitor *monitor = CAfApplicationsMonitor::NewL(session, *this); + CleanupStack::PushL(monitor); + T_Installer *installer = T_Installer::NewL(); + CleanupStack::PushL(installer); + + //install application. sis file + mAppChanged = false; + + TRAP(errNo, installer->InstallL(KSisPackageFileName)); + if (KErrNone == errNo) { + if(!mAppChanged) { + QTimer::singleShot(5000, &mLoop, SLOT(quit())); + mLoop.exec(); + } + QVERIFY(mAppChanged); + } + + //uninstall application + mAppChanged = false; + TRAP(errNo, installer->UninstallL(installer->GetComponentIdL(KSisAppFileName))); + if (KErrNone == errNo) { + if(!mAppChanged) { + QTimer::singleShot(5000, &mLoop, SLOT(quit())); + mLoop.exec(); + } + QVERIFY(mAppChanged); + } + CleanupStack::PopAndDestroy(installer); + CleanupStack::PopAndDestroy(monitor); + session.Close(); +} + +void T_Server::testCollection() +{ + TInt errNo, offset; + RApaLsSession session; + QVERIFY(KErrNone == session.Connect()); + + CAfApplicationsCollection *collection = CAfApplicationsCollection::NewL(session, this); + CleanupStack::PushL(collection); + + CAfApplicationsMonitor *monitor = CAfApplicationsMonitor::NewL(session, *collection); + CleanupStack::PushL(monitor); + + T_Installer *installer = T_Installer::NewL(); + CleanupStack::PushL(installer); + + //install application. sis file + mAppChanged = false; + TRAP(errNo, installer->InstallL(KSisPackageFileName)); + if(KErrNone == errNo) { + if(!mAppChanged) { + QTimer::singleShot(10000, &mLoop, SLOT(quit())); + mLoop.exec(); + } + QVERIFY(mAppChanged); + } + + //uninstall application + mAppChanged = false; + TRAP(errNo, installer->UninstallL(installer->GetComponentIdL(KSisAppFileName))); + if(KErrNone == errNo) { + if(!mAppChanged) { + QTimer::singleShot(10000, &mLoop, SLOT(quit())); + mLoop.exec(); + } + QVERIFY(mAppChanged); + TArray removedApps(collection->removedApplications()); + for (offset =0; offset < removedApps.Count(); ++offset) { + if (removedApps[offset] == KSisAppUid) { + break; + } + } + QVERIFY(offset < removedApps.Count()); + } + CleanupStack::PopAndDestroy(installer); + CleanupStack::PopAndDestroy(monitor); + CleanupStack::PopAndDestroy(collection); + session.Close(); +} + +void T_Server::testEngine() +{ + RApaLsSession appSession; + CleanupClosePushL(appSession); + QVERIFY(KErrNone == appSession.Connect()); + RFs fsSession; + CleanupClosePushL(fsSession); + QVERIFY(KErrNone == fsSession.Connect()); + CAfStorage* storage = CAfStorage::NewL(fsSession); + CAfApplicationsEngine *engine = CAfApplicationsEngine::NewL(appSession, *storage); + QVERIFY(0 != engine); + delete engine; + delete storage; + CleanupStack::PopAndDestroy(&fsSession); + CleanupStack::PopAndDestroy(&appSession); +} + +void T_Server::applicationsChanged() +{ + mAppChanged = true; + if (mLoop.isRunning()) { + mLoop.quit(); + } +} + +QTEST_MAIN(T_Server) diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/t_server.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/server/tsrc/t_server/t_server.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +//Copyright (c) 2010 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: + +///////////////////////////////////////////////////////////////////// + +#ifndef T_SERVER_H +#define T_SERVER_H +#include +#include +#include "afapplicationsobserver.h" +class T_Server: public QObject, + public MAfApplicationsObserver +{ +Q_OBJECT +private slots: + void testStorage(); + void testMonitor(); + void testCollection(); + void testEngine(); + +private: + void applicationsChanged(); + +private: + QEventLoop mLoop; + bool mAppChanged; +}; + +#endif //T_SERVER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/t_server/t_server.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/server/tsrc/t_server/t_server.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,73 @@ +# +# 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: +# +CONFIG += qtestlib console + +INCLUDEPATH += ./ \ + ../../inc/ \ + ../../../inc/ \ + ../../../../../inc/ + +HEADERS += ./t_server.h \ + ./t_installer.h \ + ../../inc/afserver.h \ + + +SOURCES += ./t_server.cpp \ + ./t_installer.cpp \ + ../../src/afserver.cpp \ + ../../src/afsession.cpp \ + ../../src/afstorage.cpp \ + ../../src/afstoragesynctask.cpp \ + ../../src/afstorageasynctask.cpp \ + ../../src/afbroadcasttask.cpp \ + ../../src/afdataprovidertask.cpp \ + ../../src/afobservertask.cpp \ + ../../src/afthumbnailtask.cpp \ + ../../src/afapplicationsmonitor.cpp \ + ../../src/afapplicationscollection.cpp \ + ../../src/afapplicationsstorage.cpp \ + ../../src/afapplicationsengine.cpp \ + ../../src/afdatabasecleaner.cpp \ + +LIBS += -lfbscli \ + -ledbms \ + -lestor \ + -lbafl \ + -ltsutils \ + -lhash \ + -lefsrv \ + -lafstoragecommon.lib \ + -lsif \ + -lscrclient \ + -lxqutils \ + -lapgrfx \ + +symbian { + CONFIG += symbian_test + TARGET.CAPABILITY = ALL -TCB + coverage: CONFIG -= symbian_test + + BLD_INF_RULES.prj_testexports += "./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/" \ + "./data/winscw/Hello.jar c:/" + + BLD_INF_RULES.prj_exports += "./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/" \ + "./data/winscw/Hello.jar c:/" + + exportArmSis.sources += ./data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx \ + ./data/winscw/Hello.jar + exportArmSis.path = c:/ + DEPLOYMENT += exportArmSis +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/storage/server/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/storage/server/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +# +# 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: +# + +TEMPLATE = subdirs +SUBDIRS += t_server +CONFIG += symbian_tests + + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/activitydebuger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/activitydebuger.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,521 @@ +/* +* 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 "activitydebuger.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "activitydebugerconsole.h" + +const char ActivityApplicationKeyword [] = ":ApplicationId"; +const char ActivityActivityKeyword [] = ":ActivityName"; +const char ActivityScreenshotKeyword [] = "screenshot"; + +QTM_USE_NAMESPACE + +ActivityDebuger::ActivityDebuger(QGraphicsItem *parent) : HbView(parent), mActivityClient(NULL), mByteArray(NULL) +{ + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + QServiceManager serviceManager; + serviceManager.addService(":/activityserviceplugin.xml"); + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!mActivityClient) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityClient service."); + } + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service."); + } + mTimesLabel = new HbLabel("Times"); + mBytesLabel = new HbLabel("Bytes"); + mPixmapLabel = new HbLabel("Pixmap"); + mSizeLabel = new HbLabel("Size(WxH)"); + + mPixmap = new QPixmap(":/images/wolf.bmp"); + mPixmap2 = new QPixmap(":/images/bird.bmp"); + mEmptyPixmap = new QPixmap(); + + + mTimesCombo = new HbComboBox(); + mLengthCombo = new HbComboBox(); + mPixmapCombo = new HbComboBox(); + mWidthCombo = new HbComboBox(); + mHeightCombo = new HbComboBox(); + + mTimesCombo->addItem("1"); + mTimesCombo->addItem("2"); + mTimesCombo->addItem("4"); + mTimesCombo->addItem("5"); + mTimesCombo->addItem("10"); + mTimesCombo->addItem("20"); + mTimesCombo->addItem("40"); + mTimesCombo->addItem("60"); + + QVariant variant; + variant = 10; + mLengthCombo->addItem("10 B", variant); + variant = 100; + mLengthCombo->addItem("100 B", variant); + variant = 1024; + mLengthCombo->addItem("1 KB", variant); + variant = 10240; + mLengthCombo->addItem("10 KB", variant); + variant = 102400; + mLengthCombo->addItem("100 KB", variant); + variant = 1024*1024; + mLengthCombo->addItem("1 MB", variant); + + mWidthCombo->addItem("360"); + mWidthCombo->addItem("180"); + mWidthCombo->addItem("128"); + mWidthCombo->addItem("90"); + + mHeightCombo->addItem("640"); + mHeightCombo->addItem("320"); + mHeightCombo->addItem("160"); + mHeightCombo->addItem("128"); + + + mPixmapCombo->addItem("no"); + mPixmapCombo->addItem("yes"); + mPixmapCombo->addItem("grab"); + + mSaveButton = new HbPushButton("Add"); + mGetButton = new HbPushButton("Activities"); + mDelButton = new HbPushButton("Delete"); + mGetDataButton = new HbPushButton("Get data"); + mUpdateButton = new HbPushButton("Update"); + mThumbButton = new HbPushButton("Get pixmaps"); + mClearButton = new HbPushButton("Clear"); + mDelMyButton = new HbPushButton("Reserved"); + + mConsole = new ActivityDebugerConsole; + + mLayout = new QGraphicsGridLayout(); + mLayout->addItem(mConsole, 0, 0, 3, 6); + mLayout->addItem(mSizeLabel, 3, 0, 1, 2); + mLayout->addItem(mWidthCombo, 3, 2, 1, 2); + mLayout->addItem(mHeightCombo, 3, 4, 1, 2); + mLayout->addItem(mTimesLabel, 4, 0, 1, 2); + mLayout->addItem(mBytesLabel, 4, 2, 1, 2); + mLayout->addItem(mPixmapLabel, 4, 4, 1, 2); + mLayout->addItem(mTimesCombo, 5, 0, 1, 2); + mLayout->addItem(mLengthCombo, 5, 2, 1, 2); + mLayout->addItem(mPixmapCombo, 5, 4, 1, 2); + mLayout->addItem(mClearButton, 6, 0, 1, 3); + mLayout->addItem(mGetDataButton, 6, 3, 1, 3); + mLayout->addItem(mSaveButton, 7, 0, 1, 3); + mLayout->addItem(mUpdateButton, 7, 3, 1, 3); + mLayout->addItem(mGetButton, 8, 0, 1, 2); + mLayout->addItem(mThumbButton, 8, 2, 1, 4); + mLayout->addItem(mDelButton, 9, 0, 1, 3); + mLayout->addItem(mDelMyButton, 9, 3, 1, 3); + + + + setLayout(mLayout); + + connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity())); + connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity())); + connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity())); + connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData())); + connect(mUpdateButton, SIGNAL(released()), this, SLOT(updateActivity())); + connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb())); + connect(mClearButton, SIGNAL(released()), mConsole, SLOT(clear())); + + + +} + +ActivityDebuger::~ActivityDebuger() +{ + delete mEmptyPixmap; + delete mPixmap; + delete mPixmap2; + delete mActivityClient; + delete mActivityManager; +} + + +void ActivityDebuger::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void ActivityDebuger::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void ActivityDebuger::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + +void ActivityDebuger::deleteActivity() +{ + mItemMeaage.clear(); + mItemMeaage += "***Remove all:\n"; + QList activities; + bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + bool retok = false; + int items = 0; + if (ok) { + QString actname; + for (int i=0; i activities; + ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList, activities)); + if ( ok ) + { + int items = 0; + for ( int i=0; i activities; + + ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList, activities)); + if ( ok ) + { + mThumbwait = activities.count(); + int width = mWidthCombo->currentText().toInt(); + int height = mHeightCombo->currentText().toInt(); + QSize pixSize(width, height); + for ( int i=0; i(i); + ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, userdata)); + } + + mItemMeaage = "*"; + QString aid; + aid.setNum(appid); + mItemMeaage += aid; + mItemMeaage += "; "; + mItemMeaage += actname; + mItemMeaage += "; "; + QString locid = tr("locid=%1").arg(i); + mItemMeaage += locid; + mItemMeaage += "; "; + QString res; + res.setNum(ok); + mItemMeaage += res; + mItemMeaage += "*\n"; + UpdateConsole(); + } + } + else + { + mItemMeaage += "*Failed*\n"; + UpdateConsole(); + } + +} + + + +void ActivityDebuger::saveActivity() +{ + mItemMeaage.clear(); + mItemMeaage += "***Add:\n"; + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + + QVariantHash metadata; + metadata.insert("screenshot", *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + bool retok = false; + int items = 0; + for (int i=0; iitemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap2; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert("screenshot", *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + bool retok = false; + int items = 0; + for (int i=0; i activities; + bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + if (ok) { + QString name; + QVariant data; + int items = 0; + for (int i=0; i(ptr); + QString locid; + locid = tr("locid=%1").arg(loc_id); + mThumbcurrent++; + + mItemMeaage += "*"; + mItemMeaage += locid; + mItemMeaage += "; "; + mItemMeaage += pixsize; + mItemMeaage += "*\n"; + + if (mThumbcurrent == mThumbwait) + { + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + QString screennum = tr("*screennum: %1*\n").arg(mThumbwait); + mItemMeaage += screennum; + } + UpdateConsole(); + } + +void ActivityDebuger::UpdateConsole() + { + mConsole->appendText(mItemMeaage); + mConsole->scrollToBotton(); + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/activitydebuger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/activitydebuger.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,101 @@ +/* +* 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: +* +*/ +#ifndef ACTIVITYDEBUGER_H +#define ACTIVITYDEBUGER_H + +#include +#include + +class HbLabel; +class QString; +class ActivityClient; +class QPixmap; +class QByteArray; +class QVariant; +class HbComboBox; +class QGraphicsGridLayout; +class HbPushButton; +class QByteArray; +class ActivityDebugerConsole; + +class ActivityDebuger: public HbView +{ + + Q_OBJECT + +public: + ActivityDebuger(QGraphicsItem *parent = 0); + ~ActivityDebuger(); + +private slots: + void saveActivity(); + void deleteActivity(); + void getActivity(); + void getActivityData(); + void updateActivity(); + void getActivityThumb(); + + void thumbnailReady(QPixmap pix, void * ptr); + +private: + void Before(); + void After(); + void Result(); + + void UpdateConsole(); + + +private: + + HbLabel *mTimesLabel; + HbLabel *mPixmapLabel; + HbLabel *mBytesLabel; + HbLabel *mSizeLabel; + QString mItemMeaage; + QObject *mActivityClient; + QObject *mActivityManager; + QPixmap *mPixmap; + QPixmap *mPixmap2; + QPixmap *mEmptyPixmap; + HbComboBox *mTimesCombo; + HbComboBox *mLengthCombo; + HbComboBox *mPixmapCombo; + HbComboBox *mWidthCombo; + HbComboBox *mHeightCombo; + QGraphicsGridLayout *mLayout; + HbPushButton *mSaveButton; + HbPushButton *mDelButton; + HbPushButton *mDelMyButton; + HbPushButton *mGetButton; + HbPushButton *mGetDataButton; + HbPushButton *mUpdateButton; + HbPushButton *mThumbButton; + HbPushButton *mClearButton; + QByteArray *mByteArray; + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + + int mThumbwait; + int mThumbnull; + int mThumbcurrent; + + ActivityDebugerConsole* mConsole; + +}; + +#endif //ACTIVITYDEBUGER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/activitydebuger.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/activitydebuger.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + images/wolf.bmp + images/bird.bmp + ../../activityserviceplugin/data/afservice.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/activitydebugerconsole.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/activitydebugerconsole.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +/* +* 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 "activitydebugerconsole.h" +#include + + + + + +ActivityDebugerConsole::ActivityDebugerConsole(QGraphicsItem *parent):HbTextEdit(parent) +{ + setScrollable(true); + setReadOnly(true); + clearContextMenuFlag(Hb::ShowTextContextMenuOnLongPress); + clearContextMenuFlag(Hb::ShowTextContextMenuOnSelectionClicked); + connect( this, SIGNAL(contentsChanged()), this, SLOT(scrollToBotton())); +} + +ActivityDebugerConsole::~ActivityDebugerConsole() +{ + +} + + +void ActivityDebugerConsole::scrollToBotton() + { + HbScrollArea* scrollarea = scrollArea(); + QSizeF size = scrollarea->contentWidget()->size(); + QPointF point( 0, size.height() ); + scrollarea->scrollContentsTo(point); + } + +void ActivityDebugerConsole::appendText(const QString& text) + { + setPlainText(toPlainText()+text); + } + +void ActivityDebugerConsole::clear() + { + setPlainText(QString()); + } + +void ActivityDebugerConsole::mousePressEvent(QGraphicsSceneMouseEvent */*event*/) + { + + } + +void ActivityDebugerConsole::focusInEvent(QFocusEvent */*event*/) + { + + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/activitydebugerconsole.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/activitydebugerconsole.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef ACTIVITYDEBUGERCONSOLE_H +#define ACTIVITYDEBUGERCONSOLE_H + + +#include + + + +class ActivityDebugerConsole: public HbTextEdit +{ + + Q_OBJECT + +public: + ActivityDebugerConsole(QGraphicsItem *parent = 0); + ~ActivityDebugerConsole(); + void appendText(const QString& text); + + +public slots: + void clear(); + void scrollToBotton(); + +private: + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void focusInEvent(QFocusEvent *event); + +}; + +#endif //ACTIVITYDEBUGERCONSOLE_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/activitydebugger.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/activitydebugger.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = activitydebugger + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ + activitydebuger.cpp \ + activitydebugerconsole.cpp + +HEADERS += activitydebuger.h \ + activitydebugerconsole.h + +RESOURCES += activitydebuger.qrc + +LIBS += -lafservice.dll \ + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x2000000 // Min 2Mb, max 32Mb + TARGET.CAPABILITY = ALL -TCB +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/images/bird.bmp Binary file activityfw/testapplications/activitydebugger/images/bird.bmp has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/images/wolf.bmp Binary file activityfw/testapplications/activitydebugger/images/wolf.bmp has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include + +#include "activitydebuger.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + ActivityDebuger *view = new ActivityDebuger; + + HbMainWindow window; + window.addView(view); + window.show(); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitydebugger/readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitydebugger/readme.txt Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ + +Clear - clear console + +Get data - activities data (only this app) +Response format: +act name; data type; ok + +Add - add activities +Response format: +act name; ok + +Update - update activities +Response format: +act name; ok + +Activities - activities list +Response format: +app id; act name; pixmap file; visibility flag; ok + +Get pixmaps - activities pizmaps +Response format: +app id; act name; loc id;; ok +loc id; pixmap size + +Delete my - deletes this app activities +Response format: +ok + +Delete -deletes all activities +Response format: +app id; act name; ok \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytakeawhile/activitytakeawhile.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytakeawhile/activitytakeawhile.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = activitytakeawhile + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ +viewmanager.cpp \ +letterwidget.cpp + +HEADERS += viewmanager.h \ +letterwidget.h + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytakeawhile/letterwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytakeawhile/letterwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,126 @@ +/* +* 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 "letterwidget.h" +#include +#include + + +letterwidget::letterwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + mA = new HbPushButton("A"); + mB = new HbPushButton("B"); + mC = new HbPushButton("C"); + + mSave = new HbPushButton("Save"); + mDel = new HbPushButton("Delete"); + mWait = new HbPushButton("Wait 10 s"); + mPanic = new HbPushButton("Panic client process"); + + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mA, 3, 0, 1, 1); + mGridLayout->addItem(mB, 3, 1, 1, 1); + mGridLayout->addItem(mC, 3, 2, 1, 1); + mGridLayout->addItem(mSave, 4, 0, 1, 1); + mGridLayout->addItem(mDel, 4, 1, 1, 1); + mGridLayout->addItem(mWait, 4, 2, 1, 1); + mGridLayout->addItem(mPanic, 5, 0, 1, 3); + mGridLayout->setRowStretchFactor(0, 1); + mGridLayout->setRowStretchFactor(1, 1); + mGridLayout->setRowStretchFactor(2, 1); + setLayout(mGridLayout); + + connect(mA, SIGNAL(released()), this, SLOT(toA())); + connect(mB, SIGNAL(released()), this, SLOT(toB())); + connect(mC, SIGNAL(released()), this, SLOT(toC())); + connect(mWait, SIGNAL(released()), this, SLOT(wait())); + connect(mPanic, SIGNAL(released()), this, SLOT(panic())); + + connect(mSave, SIGNAL(released()), this, SIGNAL(save())); + connect(mDel, SIGNAL(released()), this, SIGNAL(del())); + + toA(); + +} + +letterwidget::~letterwidget() +{ + // TODO Auto-generated destructor stub +} + +void letterwidget::toA() +{ + mStatename = "A"; + update(); +} + +void letterwidget::toB() +{ + mStatename = "B"; + update(); +} + +void letterwidget::toC() +{ + mStatename = "C"; + update(); +} + +void letterwidget::wait() + { + User::After(10000000); //10 s + } + +void letterwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + HbWidget::paint(painter, option, widget); + + if ( mStatename.isNull() ) { + return; + } + else if ( mStatename == "A" ) { + painter->setPen(Qt::red); + } + else if ( mStatename == "B" ) { + painter->setPen(Qt::green); + } + else { + painter->setPen(Qt::blue); + } + + QFont font; + font.setPointSize(60); + painter->setFont(font); + painter->drawText(10, 140, mStatename); +} + +QString letterwidget::state() +{ + return mStatename; +} + +void letterwidget::setState( QString state ) +{ + mStatename = state; + update(); +} + +void letterwidget::panic() +{ + User::Panic(_L("forced panic"), 122); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytakeawhile/letterwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytakeawhile/letterwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +/* +* 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: +* +*/ +#ifndef LETTERWIDGET_H_ +#define LETTERWIDGET_H_ + +#include +#include +#include +#include +#include +#include + +class letterwidget: public HbWidget +{ + Q_OBJECT +public: + letterwidget(QGraphicsItem *parent = 0); + ~letterwidget(); + QString state(); + void setState( QString state ); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + + QGraphicsGridLayout *mGridLayout; + + HbPushButton *mA; + HbPushButton *mB; + HbPushButton *mC; + + HbPushButton *mSave; + HbPushButton *mDel; + HbPushButton *mWait; + HbPushButton *mPanic; + +signals: + void save(); + void del(); + +private slots: + void toA(); + void toB(); + void toC(); + void wait(); + void panic(); + +private: + QString mStatename; + +}; + +#endif /* LETTERWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytakeawhile/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytakeawhile/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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 +#include +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow; + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytakeawhile/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytakeawhile/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,126 @@ +/* +* 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 +#include +#include +#include +#include +#include "viewmanager.h" +#include "letterwidget.h" +#include +#include + +QTM_USE_NAMESPACE + +viewmanager::viewmanager(): + HbMainWindow() +{ + QServiceManager serviceManager; + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!mActivityClient) { + qFatal("load plugin failed"); + } + + mLw = new letterwidget; + addView(mLw); + + connect(mActivityClient, SIGNAL(activityRequested(QString)), this, SLOT(loadActivityData(QString))); + + + + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok)); + if (!ok || !retok) { +// qFatal("Subscribe failed"); + } + + //startup case + QStringList arglist = qApp->arguments(); + QVariantHash actdata; + ok = QMetaObject::invokeMethod(mActivityClient, "parseCommandLine", Q_RETURN_ARG(QVariantHash, actdata), Q_ARG(QStringList, arglist)); + if (!ok) { + qFatal("Startup failed"); + } + QString actid = actdata.value("activityname").toString(); + if ( !actid.isNull() ) + { + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actid)); + if (!ok) { + qFatal("Get data failed"); + } + loadActivityData(data); + } + //startup case end + + connect(mLw, SIGNAL(save()), this, SLOT(save())); + connect(mLw, SIGNAL(del()), this, SLOT(del())); +} + +viewmanager::~viewmanager() +{ +} + +void viewmanager::save() +{ + mSaveVariant = mLw->state(); + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert("screenshot", screenshot); + + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state())); + if (!ok) { + qFatal("Remove failed"); + } + + ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state()), Q_ARG(QVariant, mSaveVariant), Q_ARG(QVariantHash, metadata)); + if (!ok || !retok) { + qFatal("Add failed"); + } +} +void viewmanager::del() +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state())); + if (!ok) { + qFatal("Remove failed"); + } +} + +void viewmanager::loadActivityData(const QString &name) +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok)); + if (!ok || !retok) { + //qFatal("Resubscribe failed"); + } + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + qFatal("Get data failed"); + } + loadActivityData(data); +} + +void viewmanager::loadActivityData(const QVariant &data) +{ + QString statename = data.toString(); + mLw->setState(statename); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytakeawhile/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytakeawhile/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,58 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +class HbApplication; +class QGraphicsGridLayout; +class HbPushButton; +class letterwidget; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(); + virtual ~viewmanager(); + void initialize(); + + + +private slots: + + void save(); + void del(); + +public slots: + void loadActivityData(const QString &name); + +public: + void loadActivityData(const QVariant &data); + +private: + + + QObject *mActivityClient; + QVariant mSaveVariant; + + letterwidget *mLw; +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/activitytestanimal.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestanimal/activitytestanimal.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = activitytestanimal + +CONFIG += console mobility +MOBILITY = serviceframework + +SOURCES += main.cpp \ + animalwidget.cpp \ + +HEADERS += animalwidget.h \ + +RESOURCES += activitytestanimal.qrc + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x800000 // Min 2Mb, max 8Mb +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/activitytestanimal.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestanimal/activitytestanimal.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,8 @@ + + + images/africaelephant.jpg + images/africatiger.jpg + images/indiaelephant.jpg + images/syberiantiger.jpg + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/animalwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestanimal/animalwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,146 @@ +/* +* 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 "animalwidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +QTM_USE_NAMESPACE + +AnimalWidget::AnimalWidget(QWidget *parent) : QWidget(parent), mActivityClient(NULL) +{ + QServiceManager serviceManager; + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!mActivityClient) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityClient service."); + } + connect(mActivityClient, SIGNAL(activityRequested(QString)), this, SLOT(loadActivity(QString))); + + + bool retok = false; + bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok)); + if (!ok || !retok) { + // qFatal("Subscribe failed"); + } + + + mAnimalLabel = new QLabel(); + mFileNameLabel = new QLabel("No image loaded"); + QPushButton *africanElephantButton = new QPushButton("African elephant"); + QPushButton *africanTigerButton = new QPushButton("African tiger"); + QPushButton *indiaElephantButton = new QPushButton("India elephant"); + QPushButton *siberianTigerButton = new QPushButton("Siberian tiger"); + QPushButton *saveActivityButton = new QPushButton("Save activity"); + QPushButton *quitButton = new QPushButton("Quit"); + + QGridLayout *layout = new QGridLayout(); + + layout->addWidget(mAnimalLabel, 0, 0, 1, 2); + layout->addWidget(mFileNameLabel, 1, 0, 1, 2); + layout->addWidget(africanElephantButton, 2, 0); + layout->addWidget(africanTigerButton, 2, 1); + layout->addWidget(indiaElephantButton, 3, 0); + layout->addWidget(siberianTigerButton, 3, 1); + layout->addWidget(saveActivityButton, 4, 0); + layout->addWidget(quitButton, 4, 1); + + connect(saveActivityButton, SIGNAL(clicked()), this, SLOT(saveActivity())); + connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); + + QSignalMapper *mapper = new QSignalMapper(this); + mapper->setMapping(africanElephantButton, ":/images/africaelephant.jpg"); + mapper->setMapping(africanTigerButton, ":/images/africatiger.jpg"); + mapper->setMapping(indiaElephantButton, ":/images/indiaelephant.jpg"); + mapper->setMapping(siberianTigerButton, ":/images/syberiantiger.jpg"); + connect(africanElephantButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(africanTigerButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(indiaElephantButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(siberianTigerButton, SIGNAL(clicked()), mapper, SLOT(map())); + + connect(mapper, SIGNAL(mapped(QString)), this, SLOT(changeAnimalImage(QString))); + + setLayout(layout); + + //startup case + QStringList arglist = qApp->arguments(); + QVariantHash actdata; + ok = QMetaObject::invokeMethod(mActivityClient, "parseCommandLine", Q_RETURN_ARG(QVariantHash, actdata), Q_ARG(QStringList, arglist)); + if (!ok) { + // qFatal("Startup failed"); + } + QString actid = actdata.value("activityname").toString(); + if ( !actid.isNull() ) + { + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actid)); + if (!ok) { + qFatal("Get data failed"); + } + changeAnimalImage(data.toString()); + } + //startup case end +} + +AnimalWidget::~AnimalWidget() +{ + delete mActivityClient; +} + +void AnimalWidget::changeAnimalImage(const QString &image) +{ + mAnimalLabel->setPixmap(QPixmap(image).scaled(QSize( 200, 300), Qt::KeepAspectRatio)); + mFileNameLabel->setText(image); + mCurrentImage = image; +} + +void AnimalWidget::saveActivity() +{ + QVariantHash metadata; + metadata.insert("screenshot", *mAnimalLabel->pixmap()); + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, "Activities - pure Qt")); + if (!ok) { + qFatal("Remove failed"); + } + ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, "Activities - pure Qt"), Q_ARG(QVariant, QVariant(mCurrentImage)), Q_ARG(QVariantHash, metadata)); + if (!ok || !retok) { + qFatal("Add failed"); + } +} + +void AnimalWidget::loadActivity(const QString &name) +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok)); + if (!ok || !retok) { + // qFatal("Resubscribe failed"); + } + + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + qFatal("Get data failed"); + } + changeAnimalImage(data.toString()); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/animalwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestanimal/animalwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef ANIMALWIDGET_H +#define ANIMALWIDGET_H + +#include + +class QLabel; +class QString; + +class AnimalWidget: public QWidget +{ + + Q_OBJECT + +public: + AnimalWidget(QWidget *parent = 0); + ~AnimalWidget(); + +private slots: + void changeAnimalImage(const QString &image); + void saveActivity(); + void loadActivity(const QString &name); + +private: + QLabel *mAnimalLabel; + QLabel *mFileNameLabel; + QString mCurrentImage; + QObject *mActivityClient; +}; + +#endif //ANIMALWIDGET_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/images/africaelephant.jpg Binary file activityfw/testapplications/activitytestanimal/images/africaelephant.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/images/africatiger.jpg Binary file activityfw/testapplications/activitytestanimal/images/africatiger.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/images/indiaelephant.jpg Binary file activityfw/testapplications/activitytestanimal/images/indiaelephant.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/images/syberiantiger.jpg Binary file activityfw/testapplications/activitytestanimal/images/syberiantiger.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestanimal/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestanimal/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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 + +#include "animalwidget.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AnimalWidget widget; + widget.setMaximumSize(360,640); + widget.setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + widget.showMaximized(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/activitytestfigure.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/activitytestfigure.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = activitytestfigure + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +squrewidget.cpp\ +trianglewidget.cpp\ +viewmanager.cpp\ +circlewidget.cpp\ +figurewidget.cpp + +HEADERS += squrewidget.h\ +trianglewidget.h\ +viewmanager.h\ +circlewidget.h\ +figurewidget.h + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/circlewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/circlewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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 "circlewidget.h" +#include +#include +#include +#include + + +circlewidget::circlewidget(QGraphicsItem *parent) + : figurewidget(parent) +{ + mGridLayout->addItem(mTriangle, 2, 0, 1, 1); + mGridLayout->addItem(mSqure, 2, 1, 1, 1); + + mColor = "blue"; + + delete mCircle; + mCircle = NULL; +} + +circlewidget::~circlewidget() +{ +} + +void circlewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QRect rect(10, 10, 300, 300); + QPainterPath painterpath; + painterpath.addEllipse(rect); + painterpath.setFillRule(Qt::WindingFill); + + painter->setPen(Qt::black); + if (mColor == "red") { + painter->setBrush(Qt::red); + } else if (mColor == "green") { + painter->setBrush(Qt::green); + } else if (mColor == "blue") { + painter->setBrush(Qt::blue); + } else { + Q_ASSERT(false); + } + painter->drawPath(painterpath); + + figurewidget::paint(painter, option, widget); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/circlewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/circlewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef CIRCLEWIDGET_H_ +#define CIRCLEWIDGET_H_ + +#include +#include +#include +#include +#include +#include "figurewidget.h" + +class circlewidget: public figurewidget +{ + Q_OBJECT +public: + circlewidget(QGraphicsItem *parent = 0); + ~circlewidget(); +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); +}; + +#endif /* CIRCLEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/figurewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/figurewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,126 @@ +/* +* 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 "figurewidget.h" +#include +#include +#include +#include + + +figurewidget::figurewidget(QGraphicsItem *parent) + : HbWidget(parent), mFailed(false) +{ + mTriangle = new HbPushButton("Triangle"); + mSqure = new HbPushButton("Squre"); + mCircle = new HbPushButton("Circle"); + mRed = new HbPushButton("Red"); + mGreen = new HbPushButton("Green"); + mBlue = new HbPushButton("Blue"); + mSave = new HbPushButton("Add"); + mDelete = new HbPushButton("Delete"); + mUpdate = new HbPushButton("Update"); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mRed, 3, 0, 1, 1); + mGridLayout->addItem(mGreen, 3, 1, 1, 1); + mGridLayout->addItem(mBlue, 3, 2, 1, 1); + mGridLayout->addItem(mSave, 4, 0, 1, 1); + mGridLayout->addItem(mUpdate, 4, 1, 1, 1); + mGridLayout->addItem(mDelete, 4, 2, 1, 1); + mGridLayout->setRowStretchFactor(0, 1); + mGridLayout->setRowStretchFactor(1, 1); + setLayout(mGridLayout); + + + connect(mRed, SIGNAL(released()), this, SLOT(red())); + connect(mGreen, SIGNAL(released()), this, SLOT(green())); + connect(mBlue, SIGNAL(released()), this, SLOT(blue())); + + connect(mTriangle, SIGNAL(released()), this, SIGNAL(totriangle())); + connect(mSqure, SIGNAL(released()), this, SIGNAL(tosqure())); + connect(mCircle, SIGNAL(released()), this, SIGNAL(tocircle())); + + connect(mSave, SIGNAL(released()), this, SIGNAL(save())); + connect(mUpdate, SIGNAL(released()), this, SIGNAL(updateAct())); + connect(mDelete, SIGNAL(released()), this, SIGNAL(del())); + + connect(mRed, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mGreen, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mBlue, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mSqure, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mTriangle, SIGNAL(released()), this, SLOT(clearFailedFlag())); + +} + +figurewidget::~figurewidget() +{ +} + +void figurewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + HbWidget::paint(painter, option, widget); + + if ( mFailed ) { + painter->setPen(Qt::gray); + QFont font; + font.setPointSize(38); + font.setBold(true); + painter->setFont(font); + painter->drawText(10, 120, "*FAIL*"); + } +} + + +void figurewidget::red() +{ + mColor = "red"; + update(); +} + +void figurewidget::green() +{ + mColor = "green"; + update(); +} + +void figurewidget::blue() +{ + mColor = "blue"; + update(); +} + +void figurewidget::setcolor(const QString &color) +{ + mColor = color; +} + +QString figurewidget::color() +{ + return mColor; +} + +void figurewidget::clearFailedFlag() + { + mFailed = false; + update(); + } + +void figurewidget::setFailedFlag() + { + mFailed = true; + update(); + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/figurewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/figurewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,67 @@ +/* +* 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: +* +*/ +#ifndef FIGUREWIDGET_H_ +#define FIGUREWIDGET_H_ + +#include +#include +#include +#include +#include + +class figurewidget: public HbWidget +{ + Q_OBJECT +public: + figurewidget(QGraphicsItem *parent = 0); + ~figurewidget(); + void setcolor(const QString &color); + QString color(); +protected: + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + QGraphicsGridLayout *mGridLayout; + HbPushButton *mTriangle; + HbPushButton *mSqure; + HbPushButton *mCircle; + HbPushButton *mRed; + HbPushButton *mGreen; + HbPushButton *mBlue; + HbPushButton *mSave; + HbPushButton *mDelete; + HbPushButton *mUpdate; + QString mColor; + bool mFailed; + +signals: + void tosqure(); + void totriangle(); + void tocircle(); + void save(); + void updateAct(); + void del(); + +protected slots: + void red(); + void green(); + void blue(); + +public slots: + void clearFailedFlag(); + void setFailedFlag(); +}; + +#endif /* FIGUREWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +/* +* 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 +#include +#include "squrewidget.h" +#include "trianglewidget.h" +#include "viewmanager.h" + +//#define hbapinotreleased + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow(&app); + mainWindow.show(); + +#ifndef hbapinotreleased + if (app.activateReason() == Hb::ActivationReasonActivity) { + // start-up case + QVariant data = app.activateData(); + mainWindow.loadActivityData(data); + } +#endif + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/squrewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/squrewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,54 @@ +/* +* 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 "squrewidget.h" +#include +#include + + +squrewidget::squrewidget(QGraphicsItem *parent) + : figurewidget(parent) +{ + mGridLayout->addItem(mTriangle, 2, 0, 1, 1); + mGridLayout->addItem(mCircle, 2, 1, 1, 1); + + mColor = "red"; + + delete mSqure; + mSqure = NULL; +} + +squrewidget::~squrewidget() +{ +} + +void squrewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QRect rect(10, 10, 300, 300); + painter->setPen(Qt::black); + if (mColor == "red") { + painter->setBrush(Qt::red); + } else if (mColor == "green") { + painter->setBrush(Qt::green); + } else if (mColor == "blue") { + painter->setBrush(Qt::blue); + } else { + Q_ASSERT(false); + } + painter->drawRect(rect); + + figurewidget::paint(painter, option, widget); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/squrewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/squrewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef SQUREWIDGET_H_ +#define SQUREWIDGET_H_ + +#include +#include +#include +#include +#include +#include "figurewidget.h" + +class squrewidget: public figurewidget +{ + Q_OBJECT +public: + squrewidget(QGraphicsItem *parent = 0); + ~squrewidget(); +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); +}; + +#endif /* SQUREWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/trianglewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/trianglewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,58 @@ +/* +* 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 "trianglewidget.h" +#include +#include +#include + + +trianglewidget::trianglewidget(QGraphicsItem *parent) + : figurewidget(parent) +{ + mGridLayout->addItem(mSqure, 2, 0, 1, 1); + mGridLayout->addItem(mCircle, 2, 1, 1, 1); + + mColor = "green"; + + delete mTriangle; + mTriangle = NULL; +} + +trianglewidget::~trianglewidget() +{ + +} + +void trianglewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QPolygon polygon; + polygon.putPoints(0, 3, 10,300, 150,10, 300,300); + painter->setPen(Qt::black); + if (mColor == "red") { + painter->setBrush(Qt::red); + } else if (mColor == "green") { + painter->setBrush(Qt::green); + } else if (mColor == "blue") { + painter->setBrush(Qt::blue); + } else { + Q_ASSERT(false); + } + + painter->drawPolygon(polygon, Qt::WindingFill); + + figurewidget::paint(painter, option, widget); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/trianglewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/trianglewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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: +* +*/ +#ifndef TRAINGLEWIDGET_H_ +#define TRAINGLEWIDGET_H_ + +#include +#include +#include +#include +#include +#include "figurewidget.h" + +class trianglewidget: public figurewidget +{ + Q_OBJECT +public: + trianglewidget(QGraphicsItem *parent = 0); + ~trianglewidget(); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); +}; + +#endif /* TRAINGLEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,201 @@ +/* +* 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 "viewmanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "squrewidget.h" +#include "trianglewidget.h" +#include "circlewidget.h" +#include "figurewidget.h" +#include + +QTM_USE_NAMESPACE +#define hbApp qobject_cast(qApp) + +viewmanager::viewmanager(HbApplication *hbapp): + HbMainWindow(), mHbApp(hbapp) +{ + + connect(hbApp->activityManager(), SIGNAL(activityRequested(QString)), this, SLOT(loadActivityData(QString))); + + + mSw = new squrewidget(); + mTw = new trianglewidget(); + mCw = new circlewidget(); + mSView = addView(mSw); + mSView->setTitle("Squre"); + mTView = addView(mTw); + mTView->setTitle("Triangle"); + mCView = addView(mCw); + mCView->setTitle("Circle"); + totriangle(); + connect(mSw, SIGNAL(totriangle()), this, SLOT(totriangle())); + connect(mSw, SIGNAL(tocircle()), this, SLOT(tocircle())); + + connect(mTw, SIGNAL(tocircle()), this, SLOT(tocircle())); + connect(mTw, SIGNAL(tosqure()), this, SLOT(tosqure())); + + connect(mCw, SIGNAL(tosqure()), this, SLOT(tosqure())); + connect(mCw, SIGNAL(totriangle()), this, SLOT(totriangle())); + + connect(mSw, SIGNAL(save()), this, SLOT(save())); + connect(mTw, SIGNAL(save()), this, SLOT(save())); + connect(mCw, SIGNAL(save()), this, SLOT(save())); + connect(mSw, SIGNAL(updateAct()), this, SLOT(updateAct())); + connect(mTw, SIGNAL(updateAct()), this, SLOT(updateAct())); + connect(mCw, SIGNAL(updateAct()), this, SLOT(updateAct())); + connect(mSw, SIGNAL(del()), this, SLOT(del())); + connect(mTw, SIGNAL(del()), this, SLOT(del())); + connect(mCw, SIGNAL(del()), this, SLOT(del())); + +} + +viewmanager::~viewmanager() +{ + +} + +void viewmanager::totriangle() +{ + setCurrentView(mTView); + mStatename = "triangle"; +} + +void viewmanager::tosqure() +{ + setCurrentView(mSView); + mStatename = "squre"; +} + +void viewmanager::tocircle() +{ + setCurrentView(mCView); + mStatename = "circle"; +} + + +void viewmanager::save() +{ + QString color; + figurewidget* widget = currentWidget(); + color = widget->color(); + + QStringList list; + list.append(mStatename); + list.append(color); + mSaveVariant.clear(); + mSaveVariant = list; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert("screenshot", screenshot); + + bool ok = hbApp->activityManager()->addActivity(mStatename, mSaveVariant, metadata); + if (!ok) { + widget->setFailedFlag(); + } + else { + widget->clearFailedFlag(); + } +} + +void viewmanager::updateAct() +{ + QString color; + figurewidget* widget = currentWidget(); + color = widget->color(); + + QStringList list; + list.append(mStatename); + list.append(color); + mSaveVariant.clear(); + mSaveVariant = list; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert("screenshot", screenshot); + + bool ok = hbApp->activityManager()->updateActivity(mStatename, mSaveVariant, metadata); + if (!ok) { + widget->setFailedFlag(); + } + else { + widget->clearFailedFlag(); + } +} + +void viewmanager::del() +{ + bool ok = hbApp->activityManager()->removeActivity(mStatename); + figurewidget* widget = currentWidget(); + if (!ok) { + widget->setFailedFlag(); + } + else { + widget->clearFailedFlag(); + } +} + +void viewmanager::loadActivityData(const QString &name) +{ + QVariant data = hbApp->activityManager()->activityData( name ); + loadActivityData( data ); +} + +void viewmanager::loadActivityData(const QVariant &data) +{ + HbView *oldView = currentView(); + QStringList list = data.toStringList(); + QString statename = list.at(0); + QString color = list.at(1); + if (statename == "squre") { + mSw->setcolor(color); + tosqure(); + mSw->update(); + } else if (statename == "triangle") { + mTw->setcolor(color); + totriangle(); + mTw->update(); + } else if (statename == "circle") { + mCw->setcolor(color); + tocircle(); + mCw->update(); + } else { + Q_ASSERT(false); + } + + if (currentView() != oldView) { + QEventLoop loop; + loop.connect(this, SIGNAL(viewReady()), SLOT(quit())); + loop.exec(); + } +} + +figurewidget* viewmanager::currentWidget() + { + HbView* view = currentView(); + QGraphicsWidget* gwidget = view->widget(); + figurewidget* lwidget = qobject_cast(gwidget); + } \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestfigure/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestfigure/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,67 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +class HbApplication; +class figurewidget; + +#include +#include + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(HbApplication *hbapp); + virtual ~viewmanager(); + figurewidget* currentWidget(); + +private: + figurewidget *mSw; + figurewidget *mTw; + figurewidget *mCw; + HbView *mSView; + HbView *mTView; + HbView *mCView; + +private slots: + void totriangle(); + void tosqure(); + void tocircle(); + + void save(); + void updateAct(); + void del(); + +public slots: + void loadActivityData(const QString &name); + +public: + void loadActivityData(const QVariant &data); + +private: + QString mStatename; + QVariant mSaveVariant; + HbApplication *mHbApp; + +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/activitytestletter.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/activitytestletter.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = activitytestletter + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +boldwidget.cpp\ +italicwidget.cpp\ +viewmanager.cpp\ +underlinewidget.cpp\ +letterwidget.cpp + +HEADERS += boldwidget.h\ +italicwidget.h\ +viewmanager.h\ +underlinewidget.h\ +letterwidget.h\ + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB + TARGET.UID3 = 0xEba3dff3 +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/boldwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/boldwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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 "boldwidget.h" +#include +#include + + +boldwidget::boldwidget(QGraphicsItem *parent) + : letterwidget(parent) +{ + mGridLayout->addItem(mItalic, 2, 0, 1, 1); + mGridLayout->addItem(mUnderline, 2, 1, 1, 1); + + mColor = "red"; + mNameCombo->addItem("Bold"); + + delete mBold; + mBold = NULL; +} + +boldwidget::~boldwidget() +{ + +} + +void boldwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + letterwidget::paint(painter, option, widget); + QFont font; + font.setPointSize(45); + font.setBold(true); + painter->setFont(font); + painter->drawText(10, 140, "Bold"); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/boldwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/boldwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ +#ifndef BOLDWIDGET_H_ +#define BOLDWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include "letterwidget.h" + +class boldwidget: public letterwidget +{ + Q_OBJECT +public: + boldwidget(QGraphicsItem *parent = 0); + ~boldwidget(); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +}; + +#endif /* BOLDWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/italicwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/italicwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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 "italicwidget.h" +#include +#include +#include + +const QString KButtonString("to bold"); + +italicwidget::italicwidget(QGraphicsItem *parent) + : letterwidget(parent) +{ + mGridLayout->addItem(mBold, 2, 0, 1, 1); + mGridLayout->addItem(mUnderline, 2, 1, 1, 1); + + mColor = "green"; + mNameCombo->addItem("Italic"); + + delete mItalic; + mItalic = NULL; +} + +italicwidget::~italicwidget() +{ + +} + +void italicwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + letterwidget::paint(painter, option, widget); + QFont font; + font.setPointSize(45); + font.setItalic(true); + painter->setFont(font); + painter->drawText(10, 140, "Italic"); +} + + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/italicwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/italicwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +/* +* 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: +* +*/ +#ifndef ITALICWIDGET_H_ +#define ITALICWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include "letterwidget.h" + +class italicwidget: public letterwidget +{ + Q_OBJECT +public: + italicwidget(QGraphicsItem *parent = 0); + ~italicwidget(); + + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +}; + +#endif /* ITALICWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/letterwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/letterwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,141 @@ +/* +* 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 "letterwidget.h" +#include +#include +#include +#include + +letterwidget::letterwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + mItalic = new HbPushButton("Italic"); + mBold = new HbPushButton("Bold"); + mUnderline = new HbPushButton("Underline"); + mRed = new HbPushButton("Red"); + mGreen = new HbPushButton("Green"); + mBlue = new HbPushButton("Blue"); + mSave = new HbPushButton("Save activity"); + mDelete = new HbPushButton("Delete activity"); + + mVisibilityLabel = new HbLabel("Visibility"); + mVisibilityCombo = new HbComboBox(); + mVisibilityCombo->addItem("none"); + mVisibilityCombo->addItem("true"); + mVisibilityCombo->addItem("false"); + + mPersistentLabel = new HbLabel("Persistence"); + mPersistentCombo = new HbComboBox(); + mPersistentCombo->addItem("none"); + mPersistentCombo->addItem("true"); + mPersistentCombo->addItem("false"); + + mNameLabel = new HbLabel("Name"); + mNameCombo = new HbComboBox(); + mNameCombo->addItem("none"); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mRed, 3, 0, 1, 1); + mGridLayout->addItem(mGreen, 3, 1, 1, 1); + mGridLayout->addItem(mBlue, 3, 2, 1, 1); + mGridLayout->addItem(mSave, 4, 0, 1, 1); + mGridLayout->addItem(mDelete, 4, 1, 1, 1); + mGridLayout->addItem(mVisibilityLabel, 5, 0, 1, 1); + mGridLayout->addItem(mVisibilityCombo, 5, 1, 1, 2); + mGridLayout->addItem(mPersistentLabel, 6, 0, 1, 1); + mGridLayout->addItem(mPersistentCombo, 6, 1, 1, 2); + mGridLayout->addItem(mNameLabel, 7, 0, 1, 1); + mGridLayout->addItem(mNameCombo, 7, 1, 1, 2); + mGridLayout->setRowStretchFactor(0, 1); + mGridLayout->setRowStretchFactor(1, 1); + setLayout(mGridLayout); + + + connect(mRed, SIGNAL(released()), this, SLOT(red())); + connect(mGreen, SIGNAL(released()), this, SLOT(green())); + connect(mBlue, SIGNAL(released()), this, SLOT(blue())); + + connect(mItalic, SIGNAL(released()), this, SIGNAL(toitalic())); + connect(mBold, SIGNAL(released()), this, SIGNAL(tobold())); + connect(mUnderline, SIGNAL(released()), this, SIGNAL(tounderline())); + + connect(mSave, SIGNAL(released()), this, SIGNAL(save())); + connect(mDelete, SIGNAL(released()), this, SIGNAL(del())); +} + +void letterwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + HbWidget::paint(painter, option, widget); + + if (mColor == "red") { + painter->setPen(Qt::red); + } else if (mColor == "green") { + painter->setPen(Qt::green); + } else if (mColor == "blue") { + painter->setPen(Qt::blue); + } else { + Q_ASSERT(false); + } +} + +letterwidget::~letterwidget() +{ +} + + +void letterwidget::red() +{ + mColor = "red"; + update(); +} + +void letterwidget::green() +{ + mColor = "green"; + update(); +} + +void letterwidget::blue() +{ + mColor = "blue"; + update(); +} + +void letterwidget::setcolor(const QString &color) +{ + mColor = color; +} + +QString letterwidget::color() +{ + return mColor; +} + +QString letterwidget::visibility() +{ + return mVisibilityCombo->currentText(); +} + +QString letterwidget::persistent() +{ + return mPersistentCombo->currentText(); +} + +QString letterwidget::name() +{ + return mNameCombo->currentText(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/letterwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/letterwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,76 @@ +/* +* 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: +* +*/ +#ifndef LETTERWIDGET_H_ +#define LETTERWIDGET_H_ + +#include +#include +#include +#include +#include +#include + +class letterwidget: public HbWidget +{ + Q_OBJECT +public: + letterwidget(QGraphicsItem *parent = 0); + ~letterwidget(); + void setcolor(const QString &color); + QString color(); + QString visibility(); + QString persistent(); + QString name(); + + +protected: + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +protected: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mItalic; + HbPushButton *mBold; + HbPushButton *mUnderline; + HbPushButton *mRed; + HbPushButton *mGreen; + HbPushButton *mBlue; + HbPushButton *mSave; + HbPushButton *mDelete; + HbLabel* mVisibilityLabel; + HbLabel* mPersistentLabel; + HbLabel* mNameLabel; + HbComboBox *mVisibilityCombo; + HbComboBox *mPersistentCombo; + HbComboBox *mNameCombo; + QString mColor; + +signals: + void tobold(); + void toitalic(); + void tounderline(); + void save(); + void del(); + +protected slots: + void red(); + void green(); + void blue(); + +}; + +#endif /* LETTERWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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 +#include +#include "boldwidget.h" +#include "italicwidget.h" +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow(&app); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/underlinewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/underlinewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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 "underlinewidget.h" +#include +#include +#include +#include + + +underlinewidget::underlinewidget(QGraphicsItem *parent) + : letterwidget(parent) +{ + mGridLayout->addItem(mItalic, 2, 0, 1, 1); + mGridLayout->addItem(mBold, 2, 1, 1, 1); + + mColor = "blue"; + mNameCombo->addItem("Underline"); + + delete mUnderline; + mUnderline = NULL; +} + +underlinewidget::~underlinewidget() +{ + +} + +void underlinewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + letterwidget::paint(painter, option, widget); + QFont font; + font.setPointSize(40); + font.setUnderline(true); + painter->setFont(font); + painter->drawText(10, 120, "Under"); + painter->drawText(10, 240, "line"); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/underlinewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/underlinewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ +#ifndef UNDERLINEWIDGET_H_ +#define UNDERLINEWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include "letterwidget.h" + +class underlinewidget: public letterwidget +{ + Q_OBJECT +public: + underlinewidget(QGraphicsItem *parent = 0); + ~underlinewidget(); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +}; + +#endif /* UNDERLINEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,224 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include "viewmanager.h" +#include "boldwidget.h" +#include "italicwidget.h" +#include "underlinewidget.h" +#include "letterwidget.h" +#include "afstorageglobals.h" + +QTM_USE_NAMESPACE + +viewmanager::viewmanager(HbApplication *hbapp): + HbMainWindow(), mHbApp(hbapp) +{ + QServiceManager serviceManager; + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!mActivityClient) { + qFatal("load plugin failed"); + } + + connect(mActivityClient, SIGNAL(activityRequested(QString)), this, SLOT(loadActivityData(QString))); + + + mBoldWidget = new boldwidget(); + mItalicWidget = new italicwidget(); + mUnderlineWidget = new underlinewidget(); + mBoldView = addView(mBoldWidget); + mBoldView->setTitle("Bold"); + mItalicView = addView(mItalicWidget); + mItalicView->setTitle("Italic"); + mUnderlineView = addView(mUnderlineWidget); + mUnderlineView->setTitle("Underline"); + toitalic(); + connect(mBoldWidget, SIGNAL(toitalic()), this, SLOT(toitalic())); + connect(mBoldWidget, SIGNAL(tounderline()), this, SLOT(tounderline())); + + connect(mItalicWidget, SIGNAL(tounderline()), this, SLOT(tounderline())); + connect(mItalicWidget, SIGNAL(tobold()), this, SLOT(tobold())); + + connect(mUnderlineWidget, SIGNAL(tobold()), this, SLOT(tobold())); + connect(mUnderlineWidget, SIGNAL(toitalic()), this, SLOT(toitalic())); + + connect(mBoldWidget, SIGNAL(save()), this, SLOT(save())); + connect(mItalicWidget, SIGNAL(save()), this, SLOT(save())); + connect(mUnderlineWidget, SIGNAL(save()), this, SLOT(save())); + connect(mBoldWidget, SIGNAL(del()), this, SLOT(del())); + connect(mItalicWidget, SIGNAL(del()), this, SLOT(del())); + connect(mUnderlineWidget, SIGNAL(del()), this, SLOT(del())); + + + //startup case + QStringList arglist = qApp->arguments(); + QVariantHash actdata; + bool ok = QMetaObject::invokeMethod(mActivityClient, "parseCommandLine", Q_RETURN_ARG(QVariantHash, actdata), Q_ARG(QStringList, arglist)); + if (!ok) { + qFatal("Startup failed"); + } + QString actid = actdata.value("activityname").toString(); + if ( !actid.isNull() ) + { + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actid)); + if (!ok) { + qFatal("Get data failed"); + } + loadActivityData(data, true); + } + //startup case end +} + +viewmanager::~viewmanager() +{ +} + +void viewmanager::toitalic() +{ + setCurrentView(mItalicView); + mStatename = "italic"; +} + +void viewmanager::tobold() +{ + setCurrentView(mBoldView); + mStatename = "bold"; +} + +void viewmanager::tounderline() +{ + setCurrentView(mUnderlineView); + mStatename = "underline"; +} + + +void viewmanager::save() +{ + QString color; + QString visible; + QString persistent; + QString name; + letterwidget* widget = currentWidget(); + color = widget->color(); + visible = widget->visibility(); + persistent = widget->persistent(); + name = widget->name(); + + QStringList list; + list.append(mStatename); + list.append(color); + mSaveVariant.clear(); + mSaveVariant = list; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + if ( visible == "true" ) + { + metadata.insert(ActivityVisibility, true); + } + else if ( visible == "false" ) + { + metadata.insert(ActivityVisibility, false); + } + + if ( persistent == "true" ) + { + metadata.insert(ActivityPersistence, true); + } + else if ( persistent == "false" ) + { + metadata.insert(ActivityPersistence, false); + } + + if ( name != "none" ) + { + metadata.insert(ActivityApplicationName, name); + } + + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename)); + if (!ok) { + qFatal("Remove failed"); + } + + ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename), Q_ARG(QVariant, mSaveVariant), Q_ARG(QVariantHash, metadata)); + if (!ok || !retok) { + qFatal("Add failed"); + } +} +void viewmanager::del() +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename)); + if (!ok) { + qFatal("Remove failed"); + } +} + +void viewmanager::loadActivityData(const QString &name) +{ + QVariant data; + bool ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + qFatal("Get data failed"); + } + loadActivityData(data, false); +} + +void viewmanager::loadActivityData(const QVariant &data, bool startup) +{ + HbView *oldView = currentView(); + + QStringList list = data.toStringList(); + QString statename = list.at(0); + QString color = list.at(1); + if (statename == "bold") { + mBoldWidget->setcolor(color); + tobold(); + mBoldWidget->update(); + } else if (statename == "italic") { + mItalicWidget->setcolor(color); + toitalic(); + mItalicWidget->update(); + } else if (statename == "underline") { + mUnderlineWidget->setcolor(color); + tounderline(); + mUnderlineWidget->update(); + } else { + Q_ASSERT(false); + } + + if (currentView() != oldView && !startup) { + QEventLoop loop; + loop.connect(this, SIGNAL(viewReady()), SLOT(quit())); + loop.exec(); + } +} + +letterwidget* viewmanager::currentWidget() + { + HbView* view = currentView(); + QGraphicsWidget* gwidget = view->widget(); + letterwidget* lwidget = qobject_cast(gwidget); + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestletter/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestletter/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +class HbApplication; +class letterwidget; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(HbApplication *hbapp); + virtual ~viewmanager(); + void initialize(); + +private: + letterwidget *mBoldWidget; + letterwidget *mItalicWidget; + letterwidget *mUnderlineWidget; + HbView *mBoldView; + HbView *mItalicView; + HbView *mUnderlineView; + +private slots: + void toitalic(); + void tobold(); + void tounderline(); + + void save(); + void del(); + +public slots: + void loadActivityData(const QString &name); + +public: + void loadActivityData(const QVariant &data, bool startup); + letterwidget* currentWidget(); + +private: + QObject *mActivityClient; + QString mStatename; + QVariant mSaveVariant; + HbApplication *mHbApp; +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/activityhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/activityhandler.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,102 @@ +/* +* 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 "activityhandler.h" + +#include + +#include +#include +#include + +#include "iconsview.h" + +QTM_USE_NAMESPACE + +ActivityHandler::ActivityHandler(IconsView *iconsView) : mIconsView(iconsView), mActivityClient(NULL) +{ + QServiceManager serviceManager; + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + Q_ASSERT(mActivityClient); + + connect(mActivityClient, SIGNAL(activityRequested(QString)), this, SLOT(loadActivityData(QString))); + + //startup case + QStringList arglist = qApp->arguments(); + QVariantHash actdata; + bool ok = QMetaObject::invokeMethod(mActivityClient, "parseCommandLine", Q_RETURN_ARG(QVariantHash, actdata), Q_ARG(QStringList, arglist)); + if (!ok) { + // qFatal("Startup failed"); + } + QString actid = actdata.value("activityname").toString(); + if ( !actid.isNull() ) + { + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actid)); + if (!ok) { + qFatal("Get data failed"); + } + mIconsView->loadActivity(data); + } + //startup case end + + bool retok; + ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok)); + if (!ok || !retok) { + // qFatal("Subscribe failed"); + } +} + +ActivityHandler::~ActivityHandler() +{ + delete mActivityClient; +} + +void ActivityHandler::handleSaveRequest(const QString &name) +{ + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert("screenshot", screenshot); + QVariant data = mIconsView->generateActivityData(); + + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name)); + if (!ok) { + qFatal("Remove failed"); + } + + ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name), Q_ARG(QVariant, data), Q_ARG(QVariantHash, metadata)); + if (!ok || !retok) { + qFatal("Add failed"); + } +} +void ActivityHandler::loadActivityData(const QString &name) +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok)); + if (!ok || !retok) { + //qFatal("Resubscribe failed"); + } + + QVariant data; + ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + qFatal("Get data failed"); + } + mIconsView->loadActivity(data); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/activityhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/activityhandler.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ +#ifndef ACTIVITYHANDLER_H +#define ACTIVITYHANDLER_H + +#include + +class IconsView; + +class ActivityHandler : public QObject +{ + + Q_OBJECT + +public: + ActivityHandler(IconsView *iconsView); + ~ActivityHandler(); + +public slots: + void handleSaveRequest(const QString &name); + void loadActivityData(const QString &name); + +private: + IconsView *mIconsView; + QObject *mActivityClient; + +}; + +#endif // ACTIVITYHANDLER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/activitytestmodel.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/activitytestmodel.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +# +# 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: +# + +TEMPLATE = app + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES = iconsview.cpp \ + main.cpp \ + activityhandler.cpp \ + +HEADERS = iconsview.h \ + activityhandler.h \ + +RESOURCES += activitytestmodel.qrc + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/activitytestmodel.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/activitytestmodel.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,12 @@ + + + data/img1.png + data/img2.png + data/img3.png + data/img4.png + data/img5.png + data/img6.png + data/img7.png + data/img8.png + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img1.PNG Binary file activityfw/testapplications/activitytestmodel/data/img1.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img2.PNG Binary file activityfw/testapplications/activitytestmodel/data/img2.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img3.PNG Binary file activityfw/testapplications/activitytestmodel/data/img3.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img4.PNG Binary file activityfw/testapplications/activitytestmodel/data/img4.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img5.PNG Binary file activityfw/testapplications/activitytestmodel/data/img5.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img6.PNG Binary file activityfw/testapplications/activitytestmodel/data/img6.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img7.PNG Binary file activityfw/testapplications/activitytestmodel/data/img7.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/data/img8.PNG Binary file activityfw/testapplications/activitytestmodel/data/img8.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/iconsview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/iconsview.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,135 @@ +/* +* 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 "iconsview.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +IconsView::IconsView(QGraphicsItem *parent) : HbView(parent) +{ + setTitle("Icons"); + + mModel = new QStandardItemModel(this); + for (int i=1; i<=8; ++i) { + addItemToModel(i); + } + + mList = new HbListView(this); + mList->setModel(mModel); + + QGraphicsGridLayout *buttonsLayout = new QGraphicsGridLayout(); + HbPushButton *addItemButton = new HbPushButton("Add item"); + connect(addItemButton, SIGNAL(clicked()), this, SLOT(addItem())); + buttonsLayout->addItem(addItemButton, 0, 0); + + HbPushButton *removeItemButtom = new HbPushButton("Remove item"); + connect(removeItemButtom, SIGNAL(clicked()), this, SLOT(removeItem())); + buttonsLayout->addItem(removeItemButtom, 0, 1); + + HbPushButton *saveActivityAButton = new HbPushButton("Save State A"); + buttonsLayout->addItem(saveActivityAButton, 1, 0); + HbPushButton *saveActivityBButton = new HbPushButton("Save State B"); + buttonsLayout->addItem(saveActivityBButton, 1, 1); + + buttonsLayout->setRowFixedHeight(0, 50); + buttonsLayout->setRowFixedHeight(1, 50); + + QSignalMapper *saveActivityMapper = new QSignalMapper(this); + saveActivityMapper->setMapping(saveActivityAButton, "StateA"); + saveActivityMapper->setMapping(saveActivityBButton, "StateB"); + connect(saveActivityAButton, SIGNAL(clicked()), saveActivityMapper, SLOT(map())); + connect(saveActivityBButton, SIGNAL(clicked()), saveActivityMapper, SLOT(map())); + connect(saveActivityMapper, SIGNAL(mapped(QString)), this, SIGNAL(activitySaveRequested(QString))); + + mItemCountLabel = new HbLabel(); + mItemCountLabel->setAlignment(Qt::AlignCenter); + mItemCountLabel->setMaximumHeight(30); + updateCountLabel(); + + QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical, this); + mainLayout->addItem(mItemCountLabel); + mainLayout->addItem(mList); + mainLayout->addItem(buttonsLayout); + + setLayout(mainLayout); +} + +IconsView::~IconsView() +{ +} + +void IconsView::addItemToModel(int number) +{ + QStandardItem *item = new QStandardItem(QIcon(QString(":data\\img%1").arg(number)), QString("Image %1").arg(number)); + mModel->appendRow(item); +} + +void IconsView::addItem() +{ + addItemToModel(qrand() % 8 + 1); + updateCountLabel(); +} + +void IconsView::removeItem() +{ + if (mModel->rowCount() > 0) { + mModel->removeRow(mModel->rowCount() - 1, QModelIndex()); + } + updateCountLabel(); +} + +void IconsView::updateCountLabel() +{ + mItemCountLabel->setPlainText(QString("List contains %1 items").arg(mModel->rowCount())); +} + +QVariant IconsView::generateActivityData() +{ + QByteArray serializedModel; + { + QDataStream stream(&serializedModel, QIODevice::WriteOnly | QIODevice::Append); + for (int row = 0; row < mModel->rowCount(); ++row) { + stream << *mModel->item(row); + } + } + return serializedModel; +} + +void IconsView::loadActivity(const QVariant &data) +{ + mModel->clear(); + QByteArray serializedModel = data.toByteArray(); + { + QDataStream stream(&serializedModel, QIODevice::ReadOnly); + while (!stream.atEnd()) { + QStandardItem *item = new QStandardItem(); + stream >> *item; + mModel->appendRow(item); + } + } + updateCountLabel(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/iconsview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/iconsview.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,57 @@ +/* +* 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: +* +*/ +#ifndef ICONSVIEW_H +#define ICONSVIEW_H + +#include + +class HbLabel; +class QStandardItemModel; +class HbListView; + +class IconsView : public HbView +{ + Q_OBJECT + +public: + IconsView(QGraphicsItem *parent = 0); + ~IconsView(); + +private slots: + void addItem(); + void removeItem(); + +public slots: + void loadActivity(const QVariant &data); + +signals: + void activitySaveRequested(const QString &name); + +public: + QVariant generateActivityData(); + +private: + void updateCountLabel(); + void addItemToModel(int number); + +private: + QStandardItemModel *mModel; + HbLabel *mItemCountLabel; + HbListView *mList; +}; + +#endif // ICONSVIEW_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodel/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodel/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,45 @@ +/* +* 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 +#include +#include + +#include "iconsview.h" +#include "activityhandler.h" + + +int main(int argc, char *argv[]) +{ + HbApplication app(argc, argv); + + IconsView *view = new IconsView(); + + ActivityHandler handler(view); + QObject::connect(view, SIGNAL(activitySaveRequested(QString)), &handler, SLOT(handleSaveRequest(QString))); + + QSignalMapper lastUseMapper; + lastUseMapper.setMapping(&app, "Autosave"); + QObject::connect(&app, SIGNAL(aboutToQuit()), &lastUseMapper, SLOT(map())); + QObject::connect(&lastUseMapper, SIGNAL(mapped(QString)), &handler, SLOT(handleSaveRequest(QString))); + + HbMainWindow window; + window.addView(view); + window.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/activitytestmodel.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodelhbintegration/activitytestmodel.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,12 @@ + + + data/img1.png + data/img2.png + data/img3.png + data/img4.png + data/img5.png + data/img6.png + data/img7.png + data/img8.png + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/activitytestmodelhbintegration.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodelhbintegration/activitytestmodelhbintegration.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = activitytestmodelhbintegration + +CONFIG += console + +load(hb.prf) +CONFIG -= symbian_i18n + +SOURCES = iconsview.cpp \ + main.cpp \ + +HEADERS = iconsview.h \ + +RESOURCES += activitytestmodel.qrc + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img1.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img1.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img2.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img2.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img3.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img3.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img4.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img4.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img5.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img5.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img6.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img6.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img7.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img7.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/data/img8.PNG Binary file activityfw/testapplications/activitytestmodelhbintegration/data/img8.PNG has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/iconsview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodelhbintegration/iconsview.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,172 @@ +/* +* 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 "iconsview.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#define hbApp qobject_cast(qApp) + +IconsView::IconsView(QGraphicsItem *parent) : HbView(parent) +{ + setTitle("Activities -Hb Model"); + + mModel = new QStandardItemModel(this); + for (int i=1; i<=8; ++i) { + addItemToModel(i); + } + + mList = new HbListView(this); + mList->setModel(mModel); + + QGraphicsGridLayout *buttonsLayout = new QGraphicsGridLayout(); + HbPushButton *addItemButton = new HbPushButton("Add item"); + connect(addItemButton, SIGNAL(clicked()), this, SLOT(addItem())); + buttonsLayout->addItem(addItemButton, 0, 0); + + HbPushButton *removeItemButtom = new HbPushButton("Remove item"); + connect(removeItemButtom, SIGNAL(clicked()), this, SLOT(removeItem())); + buttonsLayout->addItem(removeItemButtom, 0, 1); + + HbPushButton *saveActivityAButton = new HbPushButton("Save State A"); + buttonsLayout->addItem(saveActivityAButton, 1, 0); + HbPushButton *saveActivityBButton = new HbPushButton("Save State B"); + buttonsLayout->addItem(saveActivityBButton, 1, 1); + + buttonsLayout->setRowFixedHeight(0, 50); + buttonsLayout->setRowFixedHeight(1, 50); + + QSignalMapper *saveActivityMapper = new QSignalMapper(this); + saveActivityMapper->setMapping(saveActivityAButton, "State A"); + saveActivityMapper->setMapping(saveActivityBButton, "State B"); + connect(saveActivityAButton, SIGNAL(clicked()), saveActivityMapper, SLOT(map())); + connect(saveActivityBButton, SIGNAL(clicked()), saveActivityMapper, SLOT(map())); + connect(saveActivityMapper, SIGNAL(mapped(QString)), this, SLOT(saveActivity(QString))); + + mItemCountLabel = new HbLabel(); + mItemCountLabel->setAlignment(Qt::AlignCenter); + mItemCountLabel->setMaximumHeight(30); + updateCountLabel(); + + QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical, this); + mainLayout->addItem(mItemCountLabel); + mainLayout->addItem(mList); + mainLayout->addItem(buttonsLayout); + + connect(hbApp->activityManager(), SIGNAL(activityRequested(QString)), this, SLOT(loadActivity(QString))); + bool ok = hbApp->activityManager()->waitActivity(); + if (!ok) { + //qFatal("Subscribe failed"); + } + + setLayout(mainLayout); +} + +IconsView::~IconsView() +{ +} + +void IconsView::addItemToModel(int number) +{ + QStandardItem *item = new QStandardItem(QIcon(QString(":data\\img%1").arg(number)), QString("Image %1").arg(number)); + mModel->appendRow(item); +} + +void IconsView::addItem() +{ + addItemToModel(qrand() % 8 + 1); + updateCountLabel(); +} + +void IconsView::removeItem() +{ + if (mModel->rowCount() > 0) { + mModel->removeRow(mModel->rowCount() - 1, QModelIndex()); + } + updateCountLabel(); +} + +void IconsView::updateCountLabel() +{ + mItemCountLabel->setPlainText(QString("List contains %1 items").arg(mModel->rowCount())); +} + +QVariant IconsView::generateActivityData() +{ + QByteArray serializedModel; + { + QDataStream stream(&serializedModel, QIODevice::WriteOnly | QIODevice::Append); + for (int row = 0; row < mModel->rowCount(); ++row) { + stream << *mModel->item(row); + } + } + return serializedModel; +} + +void IconsView::saveActivity(const QString &name) +{ + HbMainWindow *mainWindow = hbInstance->allMainWindows().value(0); + QVariantHash metadata; + metadata.insert("screenshot", QPixmap::grabWidget(mainWindow, mainWindow->rect())); + bool ok = hbApp->activityManager()->removeActivity(name); + if (!ok) { + //qFatal("Remove failed" ); + } + ok = hbApp->activityManager()->addActivity(name, generateActivityData(), metadata); + if (!ok) { + qFatal("Add failed"); + } +} + +void IconsView::loadActivity(const QString &name) +{ + bool ok = hbApp->activityManager()->waitActivity(); + if (!ok) { + //qFatal("Resubscribe failed"); + } + QVariant data = hbApp->activityManager()->activityData(name); + loadActivity(data); +} + +void IconsView::loadActivity(const QVariant &data) +{ + mModel->clear(); + QByteArray serializedModel = data.toByteArray(); + { + QDataStream stream(&serializedModel, QIODevice::ReadOnly); + while (!stream.atEnd()) { + QStandardItem *item = new QStandardItem(); + stream >> *item; + mModel->appendRow(item); + } + } + updateCountLabel(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/iconsview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodelhbintegration/iconsview.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +/* +* 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: +* +*/ +#ifndef ICONSVIEW_H +#define ICONSVIEW_H + +#include + +class HbLabel; +class QStandardItemModel; +class HbListView; + +class IconsView : public HbView +{ + Q_OBJECT + +public: + IconsView(QGraphicsItem *parent = 0); + ~IconsView(); + +private slots: + void addItem(); + void removeItem(); + +public slots: + void saveActivity(const QString &name); + void loadActivity(const QString &name); + void loadActivity(const QVariant &data); + +public: + QVariant generateActivityData(); + +private: + void updateCountLabel(); + void addItemToModel(int number); + +private: + QStandardItemModel *mModel; + HbLabel *mItemCountLabel; + HbListView *mList; +}; + +#endif // ICONSVIEW_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/activitytestmodelhbintegration/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/activitytestmodelhbintegration/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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 +#include +#include + +#include "iconsview.h" + +int main(int argc, char *argv[]) +{ + HbApplication app(argc, argv); + + IconsView *view = new IconsView(); + + QSignalMapper lastUseMapper; + lastUseMapper.setMapping(&app, "Autosave"); + QObject::connect(&app, SIGNAL(aboutToQuit()), &lastUseMapper, SLOT(map())); + QObject::connect(&lastUseMapper, SIGNAL(mapped(QString)), view, SLOT(saveActivity(QString))); + + HbMainWindow window; + window.addView(view); + window.show(); + + if (app.activateReason() == Hb::ActivationReasonActivity) { + // start-up case + QVariant data = app.activateData(); + view->loadActivity(data); + + } + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/appactluncher/appactluncher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/appactluncher/appactluncher.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = appactluncher + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +lunchwidget.cpp + +LIBS += -lxqutils +LIBS += -lafactivitylauncher +LIBS += -lapgrfx +LIBS += -lws32 + +HEADERS += lunchwidget.h + + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/appactluncher/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/appactluncher/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,125 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QTM_USE_NAMESPACE + +const QString KAppUid = "Efe0aa02"; +const QString KActUid = "Eba3ddd2"; + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + + QServiceManager serviceManager; + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service."); + } + mBackgroundCheckBox = new HbCheckBox("background"); + mBackgroundCheckBox->setCheckState(Qt::Unchecked); + mLunchButton = new HbPushButton("Lunch App"); + mLunchButton1 = new HbPushButton("Lunch Act"); + mResultLabel = new HbLabel; + mPlatformCombo = new HbComboBox(); + mPlatformCombo->addItem("Qt"); + mPlatformCombo->addItem("Symbian"); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mResultLabel, 0, 0, 1, 1); + mGridLayout->addItem(mLunchButton, 1, 0, 1, 1); + mGridLayout->addItem(mLunchButton1, 2, 0, 1, 1); + mGridLayout->addItem(mBackgroundCheckBox, 3, 0, 1, 1); + mGridLayout->addItem(mPlatformCombo, 4, 0, 1, 1); + setLayout(mGridLayout); + + + connect(mLunchButton, SIGNAL(released()), this, SLOT(lunchApp())); + connect(mLunchButton1, SIGNAL(released()), this, SLOT(lunchAct())); + + User::LeaveIfError(mApaLsSession.Connect()); + User::LeaveIfError(mWsSession.Connect()); + mSymbianAL = CAfActivityLauncher::NewL(mApaLsSession, mWsSession) ; + +} + +lunchwidget::~lunchwidget() +{ + mApaLsSession.Close(); + mWsSession.Close(); + delete mSymbianAL; +} + +void lunchwidget::lunchApp() +{ + QUrl url; + url.setScheme(Af::KActivityScheme); + url.setHost(KAppUid); + url.addQueryItem(Af::KActivityUriNameKey, "nonexist"); + if (mBackgroundCheckBox->checkState() == Qt::Checked) { + url.addQueryItem(Af::KActivityUriBackgroundKey, "back"); + } + url.addQueryItem("param1", "trompka"); + QString debugString = url.toString(); + lunch(url); +} + +void lunchwidget::lunchAct() +{ + QUrl url; + url.setScheme(Af::KActivityScheme); + url.setHost(KActUid); + url.addQueryItem(Af::KActivityUriNameKey, "bold"); + if (mBackgroundCheckBox->checkState() == Qt::Checked) { + url.addQueryItem(Af::KActivityUriBackgroundKey, "back"); + } + url.addQueryItem("param1", "trompka"); + QString debugString = url.toString(); + + lunch(url); +} + +void lunchwidget::lunch(const QUrl& url) +{ + bool ok = true; + if(mPlatformCombo->currentText() == "Qt") { + ok = QMetaObject::invokeMethod(mActivityManager, "launchActivity", Q_ARG(QUrl, url) ); + } + else { + HBufC *uriDescriptor = XQConversions::qStringToS60Desc(QString(url.toEncoded())); + TRAPD(err, mSymbianAL->launchActivityL(*uriDescriptor)); + bool errbool = static_cast(err); + ok = !errbool; + delete uriDescriptor; + } + + if ( ok ) { + mResultLabel->setPlainText( "ok" ); + } + else { + mResultLabel->setPlainText( "fail" ); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/appactluncher/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/appactluncher/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,61 @@ +/* +* 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: +* +*/ +#ifndef LUNCWIDGET_H_ +#define LUNCWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include + +class HbCheckBox; +class HbComboBox; +class CAfActivityLauncher; + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mLunchButton; + HbPushButton *mLunchButton1; + HbLabel* mResultLabel; + QObject *mActivityManager; + HbCheckBox* mBackgroundCheckBox; + HbComboBox *mPlatformCombo; + + RApaLsSession mApaLsSession; + RWsSession mWsSession; + CAfActivityLauncher* mSymbianAL; + +private slots: + void lunchApp(); + void lunchAct(); + +private: + void lunch(const QUrl& url); +}; + +#endif /* LUNCWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/appactluncher/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/appactluncher/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include "lunchwidget.h" + + + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/apptostart/apptostart.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/apptostart/apptostart.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = apptostart + +CONFIG += console +load(hb.prf) +CONFIG -= symbian_i18n + + +SOURCES += main.cpp\ +lunchwidget.cpp + + +HEADERS += lunchwidget.h + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB + TARGET.UID3 = 0xEfe0aa02 +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/apptostart/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/apptostart/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,71 @@ +/* +* 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 "lunchwidget.h" +#include +#include + + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + + mResultLabel = new HbLabel; + mResultLabel2 = new HbLabel; + mCountLabel = new HbLabel; + QStringList list = hbApp->arguments(); + int count = list.count(); + if ( count <= 1 ) { + mResultLabel->setPlainText("arg1: None"); + mResultLabel2->setPlainText("arg2: None"); + } + else if( count == 2 ) { + QString arg = list.at(1); + mResultLabel->setPlainText( tr("arg1: ") + arg ); + mResultLabel2->setPlainText( "arg2: None" ); + } + else { + QString arg1 = list.at(1); + mResultLabel->setPlainText( tr("arg1: ") + arg1 ); + QString arg2 = list.at(2); + mResultLabel2->setPlainText( tr("arg2: ") + arg2 ); + } + + QString countstring; + countstring.setNum(count); + countstring = tr("arg count: ") + countstring; + mCountLabel->setPlainText(countstring); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mResultLabel, 0, 0, 1, 1); + mGridLayout->addItem(mResultLabel2, 1, 0, 1, 1); + mGridLayout->addItem(mCountLabel, 2, 0, 1, 1); + setLayout(mGridLayout); + + +} + +lunchwidget::~lunchwidget() +{ +} + +void lunchwidget::lunch() +{ + +} + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/apptostart/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/apptostart/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef LUNCWIDGET_H_ +#define LUNCWIDGET_H_ + +#include +#include +#include +#include +#include + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mLunchButton; + HbLabel* mResultLabel; + HbLabel* mResultLabel2; + HbLabel* mCountLabel; + QObject *mActivityManager; + +private slots: + void lunch(); +}; + +#endif /* LUNCWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/apptostart/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/apptostart/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include "lunchwidget.h" + + + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/hbmeasuretest/hbmeasuretest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/hbmeasuretest/hbmeasuretest.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,678 @@ +/* +* 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 "hbmeasuretest.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char ActivityApplicationKeyword [] = ":ApplicationId"; +const char ActivityActivityKeyword [] = ":ActivityName"; +const char ActivityScreenshotKeyword [] = "screenshot"; + +QTM_USE_NAMESPACE + +MeasureTest::MeasureTest(QGraphicsItem *parent) : HbView(parent), mActivityClient(NULL), mByteArray(NULL) + +{ + mFile = new QFile("c:\\measuretest.txt"); + mFile->open(QIODevice::Append | QIODevice::Text); + mStream = new QTextStream(mFile); + + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + QServiceManager serviceManager; + serviceManager.addService(":/activityserviceplugin.xml"); + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!mActivityClient) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityClient service."); + } + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service."); + } + + HbWidget* widget = new HbWidget; + HbScrollArea* scrollArea = new HbScrollArea; + + mResultLabel = new HbLabel(); + mItemLabel = new HbLabel(); + mTimesLabel = new HbLabel("Times"); + mBytesLabel = new HbLabel("Bytes"); + mPixmapLabel = new HbLabel("Pixmap"); + mSizeLabel = new HbLabel("Size(WxH)"); + + mPixmap = new QPixmap(":/images/wolf.bmp"); + mEmptyPixmap = new QPixmap(); + + + mTimesCombo = new HbComboBox(); + mLengthCombo = new HbComboBox(); + mPixmapCombo = new HbComboBox(); + mWidthCombo = new HbComboBox(); + mHeightCombo = new HbComboBox(); + + mTimesCombo->addItem("1"); + mTimesCombo->addItem("2"); + mTimesCombo->addItem("4"); + mTimesCombo->addItem("5"); + mTimesCombo->addItem("10"); + mTimesCombo->addItem("20"); + mTimesCombo->addItem("40"); + mTimesCombo->addItem("60"); + + QVariant variant; + variant = 10; + mLengthCombo->addItem("10 B", variant); + variant = 100; + mLengthCombo->addItem("100 B", variant); + variant = 1024; + mLengthCombo->addItem("1 KB", variant); + variant = 10240; + mLengthCombo->addItem("10 KB", variant); + variant = 102400; + mLengthCombo->addItem("100 KB", variant); + variant = 1024*1024; + mLengthCombo->addItem("1 MB", variant); + + mWidthCombo->addItem("360"); + mWidthCombo->addItem("180"); + mWidthCombo->addItem("128"); + mWidthCombo->addItem("90"); + + mHeightCombo->addItem("640"); + mHeightCombo->addItem("320"); + mHeightCombo->addItem("160"); + mHeightCombo->addItem("128"); + + + mPixmapCombo->addItem("no"); + mPixmapCombo->addItem("yes"); + mPixmapCombo->addItem("grab"); + + mSaveButton = new HbPushButton("Add activities"); + mGetButton = new HbPushButton("Get activities"); + mDelButton = new HbPushButton("Delete activities"); + mGetDataButton = new HbPushButton("Get activities data"); + mUpdateButton = new HbPushButton("Update activities"); + mThumbButton = new HbPushButton("Get act with thumb"); + mGetDataTimesButton = new HbPushButton("Get data times"); + mSaveTimesButton = new HbPushButton("Add act times"); + mSave10TimesButton = new HbPushButton("Add 10 act times");; + + mLayout = new QGraphicsGridLayout(); + mLayout->addItem(mResultLabel, 0, 0, 1, 6); + mLayout->addItem(mItemLabel, 1, 0, 1, 6); + mLayout->addItem(mSizeLabel, 2, 0, 1, 2); + mLayout->addItem(mWidthCombo, 2, 2, 1, 2); + mLayout->addItem(mHeightCombo, 2, 4, 1, 2); + mLayout->addItem(mTimesLabel, 3, 0, 1, 2); + mLayout->addItem(mBytesLabel, 3, 2, 1, 2); + mLayout->addItem(mPixmapLabel, 3, 4, 1, 2); + mLayout->addItem(mTimesCombo, 4, 0, 1, 2); + mLayout->addItem(mLengthCombo, 4, 2, 1, 2); + mLayout->addItem(mPixmapCombo, 4, 4, 1, 2); + mLayout->addItem(mSaveButton, 5, 0, 1, 6); + mLayout->addItem(mGetButton, 6, 0, 1, 6); + mLayout->addItem(mDelButton, 7, 0, 1, 6); + mLayout->addItem(mGetDataButton, 8, 0, 1, 6); + mLayout->addItem(mUpdateButton, 9, 0, 1, 6); + mLayout->addItem(mThumbButton, 10, 0, 1, 6); + mLayout->addItem(mSaveTimesButton, 11, 0, 1, 6); + mLayout->addItem(mSave10TimesButton, 12, 0, 1, 6); + mLayout->addItem(mGetDataTimesButton, 13, 0, 1, 6); + widget->setLayout(mLayout); + + scrollArea->setContentWidget(widget); + scrollArea->setScrollDirections(Qt::Vertical); + scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + + connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity())); + connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity())); + connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity())); + connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData())); + connect(mUpdateButton, SIGNAL(released()), this, SLOT(updateActivity())); + connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb())); + connect(mGetDataTimesButton, SIGNAL(released()), this, SLOT(getTimesActivityData())); + connect(mSaveTimesButton, SIGNAL(released()), this, SLOT(saveTimes())); + connect(mSave10TimesButton, SIGNAL(released()), this, SLOT(save10actTimes())); + + QGraphicsGridLayout* mainLayout = new QGraphicsGridLayout; + mainLayout->addItem(scrollArea, 0, 0, 1, 6); + setLayout(mainLayout); + +} + +MeasureTest::~MeasureTest() +{ + delete mFile; + delete mEmptyPixmap; + delete mPixmap; + delete mActivityClient; + delete mActivityManager; +} + + +void MeasureTest::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void MeasureTest::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void MeasureTest::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + +void MeasureTest::deleteActivity() +{ + QList activities; + bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + bool retok = false; + + if (ok) { + QString name; + Before(); + for (int i=0; isetPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::getActivity() +{ + bool ok = false; + QList activities; + Before(); + ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + After(); + Result(); + int count = activities.count(); + mItemMessage.clear(); + mResultMessage.clear(); + if (!ok) { + mItemMessage = (tr("invoke error")); + mResultMessage = (tr("invoke error")); + } else { + mItemMessage = (tr("items: %1")).arg(count); + mResultMessage = (tr("time: %1 ms")).arg(iResult); + } + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::getActivityThumb() +{ + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + bool ok = false; + QList activities; + Before(); + ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + mThumbwait = activities.count(); + int width = mWidthCombo->currentText().toInt(); + int height = mHeightCombo->currentText().toInt(); + QSize pixSize(width, height); + for ( int i=0; isetPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + } else { + //connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + } + + +} + +void MeasureTest::saveActivity() +{ + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert("screenshot", *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + bool retok = false; + Before(); + for (int i=0; isetPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::updateActivity() +{ + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert("screenshot", *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + bool retok = false; + Before(); + for (int i=0; isetPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::getActivityData() +{ + QList activities; + bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + + if (ok) { + QString name; + QVariant data; + Before(); + for (int i=0; isetPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::thumbnailReady(QPixmap pix, void * ptr) + { + if ( pix.isNull() ) + { + mThumbnull++; + } + mThumbcurrent++; + mItemMessage = (tr("items: %1 from %2, but null %3")).arg(mThumbcurrent).arg(mThumbwait).arg(mThumbnull); + mItemLabel->setPlainText(mItemMessage); + mResultMessage = ""; + mResultLabel->setPlainText(mResultMessage); + if (mThumbcurrent == mThumbwait) + { + After(); + Result(); + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + mResultMessage = (tr("time: %1 ms")).arg(iResult); + mResultLabel->setPlainText(mResultMessage); + } + } + +void MeasureTest::saveTimes() +{ + *mStream<<"save Times\n"; + QList trymeasure; + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert("screenshot", *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + bool retok = false; + QString name("0"); + User::After(2000000); //2s + for (int i=0; iflush(); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::save10actTimes() +{ + *mStream<<"save 10 act Times\n"; + QList trymeasure; + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert("screenshot", *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + bool retok = false; + QString name; + User::After(2000000); //2s + for(int i=0; i activities; + ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + + if (ok) { + QString name; + for (int i=0; iflush(); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + +} + +void MeasureTest::getTimesActivityData() +{ + int times = 0; + times = mTimesCombo->currentText().toInt(); + *mStream<<"get data Times\n"; + QList trymeasure; + + QList activities; + bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList, activities)); + User::After(2000000); //2s + if (ok) { + QString name; + QVariant data; + for(int i=0; iflush(); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + +} + +int MeasureTest::average(const QList& list) +{ + int count = list.count(); + int sum=0; + for(int i=0; i& list, int average) +{ + for(int i=0; i +#include + +class HbLabel; +class QString; +class ActivityClient; +class QPixmap; +class QByteArray; +class QVariant; +class HbComboBox; +class QGraphicsGridLayout; +class HbPushButton; +class QByteArray; +class QFile; +class QTextStream; + +class MeasureTest: public HbView +{ + + Q_OBJECT + +public: + MeasureTest(QGraphicsItem *parent = 0); + ~MeasureTest(); + +private slots: + void saveActivity(); + void deleteActivity(); + void getActivity(); + void getActivityData(); + void updateActivity(); + void getActivityThumb(); + void saveTimes(); + void save10actTimes(); + void getTimesActivityData(); + + void thumbnailReady(QPixmap pix, void * ptr); + +private: + void Before(); + void After(); + void Result(); + int average(const QList& list); + int writeResults(const QList& list, int average); + + +private: + HbLabel *mResultLabel; + HbLabel *mItemLabel; + HbLabel *mTimesLabel; + HbLabel *mPixmapLabel; + HbLabel *mBytesLabel; + HbLabel *mTypeLabel; + HbLabel *mSizeLabel; + QString mItemMessage; + QString mResultMessage; + QObject *mActivityClient; + QObject *mActivityManager; + QPixmap *mPixmap; + QPixmap *mEmptyPixmap; + HbComboBox *mTimesCombo; + HbComboBox *mLengthCombo; + HbComboBox *mPixmapCombo; + HbComboBox *mWidthCombo; + HbComboBox *mHeightCombo; + QGraphicsGridLayout *mLayout; + HbPushButton *mSaveButton; + HbPushButton *mDelButton; + HbPushButton *mGetButton; + HbPushButton *mGetDataButton; + HbPushButton *mUpdateButton; + HbPushButton *mThumbButton; + HbPushButton *mGetDataTimesButton; + HbPushButton *mSaveTimesButton; + HbPushButton *mSave10TimesButton; + QByteArray *mByteArray; + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + + int mThumbwait; + int mThumbnull; + int mThumbcurrent; + + QFile* mFile; + QTextStream* mStream; + + + +}; + +#endif //MEASURETEST_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/hbmeasuretest/hbmeasuretest.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/hbmeasuretest/hbmeasuretest.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = hbmeasuretest + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ + hbmeasuretest.cpp \ + +HEADERS += hbmeasuretest.h \ + +RESOURCES += hbmeasuretest.qrc + +LIBS += -lafservice.dll \ + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x2000000 // Min 2Mb, max 32Mb + TARGET.CAPABILITY = ALL -TCB +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/hbmeasuretest/hbmeasuretest.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/hbmeasuretest/hbmeasuretest.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,6 @@ + + + images/wolf.bmp + ../../activityserviceplugin/data/afservice.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/hbmeasuretest/images/wolf.bmp Binary file activityfw/testapplications/hbmeasuretest/images/wolf.bmp has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/hbmeasuretest/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/hbmeasuretest/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include + +#include "hbmeasuretest.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MeasureTest *view = new MeasureTest; + + HbMainWindow window; + window.addView(view); + window.show(); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/actautobenchmark/actautobenchmark.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/actautobenchmark/actautobenchmark.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = actautobenchmark + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ + hbmeasuretest.cpp \ + +HEADERS += hbmeasuretest.h \ + + + +LIBS += -lafservice +LIBS += -lefsrv + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x2000000 // Min 2Mb, max 32Mb + TARGET.CAPABILITY = ALL -TCB +} + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/actautobenchmark/hbmeasuretest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/actautobenchmark/hbmeasuretest.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,642 @@ +/* +* 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 "hbmeasuretest.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "afstorageglobals.h" +#include +#include +#include + +QTM_USE_NAMESPACE + +const int KDefaultTimes = 10; +const int KDefaultLoop = 10; +const int KDefaultSaveBytes = 10*1024; +const int KGet1Bytes = 10*1024; +const int KGet2Bytes = 100*1024; +const int KGet3Bytes = 1024*1024; +const int KDefaultRepeat = 3; + +MeasureTest::MeasureTest(QGraphicsItem *parent) : HbView(parent), mByteArray(NULL), + mActionCounter(0) + +{ + mFile = new QFile("c:\\data\\actautobenchmark.txt"); + mFile->open(QIODevice::Append | QIODevice::Text); + mStream = new QTextStream(mFile); + + QServiceManager serviceManager; + serviceManager.addService(":/activityserviceplugin.xml"); + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service."); + } + + + mActivityStorage = new AfActivityStorage; + mActivation = new AfActivation; + + mResultLabel = new HbLabel(); + mItemLabel = new HbLabel(); + + + mSaveOneButton = new HbPushButton("Save 1 in loop"); + mSaveMoreButton = new HbPushButton("Save 10 in loop"); + mGetButton = new HbPushButton("Get in loop"); + mAllButton = new HbPushButton("All"); + + + mLayout = new QGraphicsGridLayout(); + mLayout->addItem(mResultLabel, 0, 0, 1, 6); + mLayout->addItem(mItemLabel, 1, 0, 1, 6); + mLayout->addItem(mSaveOneButton, 2, 0, 1, 6); + mLayout->addItem(mSaveMoreButton, 3, 0, 1, 6); + mLayout->addItem(mGetButton, 4, 0, 1, 6); + mLayout->addItem(mAllButton, 5, 0, 1, 6); + setLayout(mLayout); + + + connect(mSaveOneButton, SIGNAL(released()), this, SLOT(preClear())); + connect(mSaveMoreButton, SIGNAL(released()), this, SLOT(preClear())); + connect(mGetButton, SIGNAL(released()), this, SLOT(preClear())); + connect(mAllButton, SIGNAL(released()), this, SLOT(preClear())); + + connect(mSaveOneButton, SIGNAL(released()), this, SLOT(saveOne())); + connect(mSaveMoreButton, SIGNAL(released()), this, SLOT(saveMore())); + connect(mGetButton, SIGNAL(released()), this, SLOT(getOne())); + connect(mAllButton, SIGNAL(released()), this, SLOT(all())); + + connect(mSaveOneButton, SIGNAL(released()), this, SLOT(startTimer())); + connect(mSaveMoreButton, SIGNAL(released()), this, SLOT(startTimer())); + connect(mGetButton, SIGNAL(released()), this, SLOT(startTimer())); + connect(mAllButton, SIGNAL(released()), this, SLOT(startTimer())); + + mTimer = new QTimer(this); + connect(mTimer, SIGNAL(timeout()), this, SLOT(timeout())); + +} + +MeasureTest::~MeasureTest() +{ + delete mFile; + delete mStream; + delete mActivityManager; + delete mActivityStorage; + delete mActivation; +} + + +void MeasureTest::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void MeasureTest::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void MeasureTest::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + + +int MeasureTest::average(const QList& list) +{ + int count = list.count(); + int sum=0; + for(int i=0; i& list, int average) +{ + for(int i=0; iflush(); +} + +bool MeasureTest::saveBytes(int bytes) +{ + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + + + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + + + bool ok = false; + QString name("0"); + + ok = mActivityStorage->saveActivity(name, variant, metadata); + return ok; +} + +bool MeasureTest::deleteActivities() +{ + QStringList activities = mActivityStorage->allActivities(); + QString name; + bool ok = true; + for (int i=0; iremoveActivity(activities.at(i)); + if (!ok) { + break; + } + } + return ok; +} + +bool MeasureTest::saveOneInLoop(int action) +{ + int bytes = KDefaultSaveBytes; + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + + + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + + int times = KDefaultTimes; + bool ok = false; + QString name("0"); + ok = deleteActivities(); + if(!ok) { + logError("Remove"); + return false; + } + User::After(2000000); //2s + + for (int i=0; isaveActivity(name, variant, metadata); + After(); + Result(); + if (!ok) { + break; + } + mResultsList[action].append(iResult); + ok = deleteActivities(); + if(!ok) { + logError("Remove"); + return false; + } + User::After(2000000); //2s + } + + int averageint = average(mResultsList.at(action)); + mResultsList[action].append(averageint); + + if(!ok) { + logError("SaveOne"); + } + + return ok; + +} + +bool MeasureTest::saveMoreInLoop(int action) +{ + int bytes = KDefaultSaveBytes; + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + + + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + + bool ok = deleteActivities(); + if(!ok) { + logError("Remove"); + return false; + } + + int times = KDefaultTimes; + + + ok = false; + QString name; + + User::After(2000000); //2s + for(int i=0; isaveActivity(name, variant, metadata); + if (!ok) { + break; + } + } + After(); + Result(); + mResultsList[action].append(iResult); + + QStringList activities = mActivityStorage->allActivities(); + + ok = deleteActivities(); + if(!ok) { + logError("Remove"); + return false; + } + User::After(2000000); //2s + + } + + int averageint = average(mResultsList.at(action)); + averageint = (averageint+0.5)/KDefaultLoop; + mResultsList[action].append(averageint); + + if(!ok) { + logError("SaveMore"); + } + + return ok; +} + +bool MeasureTest::getOneInLoop(int bytes, int action) +{ + int times = KDefaultTimes; + bool ok = deleteActivities(); + if(!ok) { + logError("Remove"); + return false; + } + ok = saveBytes(bytes); + if(!ok) { + logError("SaveBytes"); + return false; + } + + QStringList activities = mActivityStorage->allActivities(); + + + User::After(2000000); //2s + QString name; + QVariant data; + + for(int i=0; iactivityData(activities.at(i)); + } + After(); + Result(); + mResultsList[action].append(iResult); + User::After(2000000); //2s + } + + int averageint = average(mResultsList.at(action)); + mResultsList[action].append(averageint); + + if(!ok) { + logError("GetOne"); + } + + return ok; +} + +void MeasureTest::saveOne() +{ + QList l; + for(int i=0; i l; + for(int i=0; i l; + for(int i=0; istop(); + logResult(); + enableControls(true); + return; + } + QString actionName = mActionsList.at(mActionCounter); + bool ok = false; + + if(actionName == "save1") { + ok = saveOneInLoop(mActionCounter); + } + else if(actionName == "save10") { + ok = saveMoreInLoop(mActionCounter); + } + else if(actionName == "get1") { + ok = getOneInLoop(KGet1Bytes, mActionCounter); + } + else if(actionName == "get2") { + ok = getOneInLoop(KGet2Bytes, mActionCounter); + } + else if(actionName == "get3") { + ok = getOneInLoop(KGet3Bytes, mActionCounter); + } + else { + ok = false; + } + + mItemMessage.clear(); + mResultMessage.clear(); + + mItemMessage = (tr("action: %1")).arg(actionName); + mResultMessage = (tr("count: %1")).arg(mActionCounter).arg(ok); + + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + + mActionCounter++; +} + +void MeasureTest::preClear() +{ + mResultsList.clear(); + mActionsList.clear(); + mActionCounter = 0; + enableControls(false); +} + +void MeasureTest::startTimer() +{ + mTimer->start(1); +} + +void MeasureTest::logResult() +{ + QList save1indexes; + QList save10indexes; + QList get1indexes; + QList get2indexes; + QList get3indexes; + + for(int i=0; i& indexes, int caseno, const QString& mess, const QString& type) +{ + int indexno = indexes.count(); + if(indexno == 0) { + return; + } + + QString caseness = tr("---+++++ Case %1.\n\n").arg(caseno); + *mStream<& reslist = mResultsList.at(indexes.at(j)); + if(reslist.count()>i) { + int res = reslist.at(i); + *mStream<<" "<flush(); +} + +QString MeasureTest::middle(const QList& list) +{ + if(list.count()==0) { + return "-"; + } + QList tlist = list; + qSort(tlist); + int count = tlist.count(); + QString res; + res.setNum(tlist.at(count/2)); + return res; +} + +void MeasureTest::logSaveSummary(const QList& indexes1, const QList& indexes10) +{ + *mStream<<"---++++ Midle time of save activity - the faster and the slowest result has been rejected.\n\n"; + + QList save1averages; + QList save10averages; + + for(int i=0; i& reslist = mResultsList.at(indexes1.at(i)); + if(reslist.count()==KDefaultTimes+1) { + int d = reslist.at(KDefaultTimes); + save1averages.append(reslist.at(KDefaultTimes)); + } + } + + for(int i=0; i& reslist = mResultsList.at(indexes10.at(i)); + if(reslist.count()==KDefaultTimes+1) { + save10averages.append(reslist.at(KDefaultTimes)); + } + } + QString save1middle = middle(save1averages); + QString save10middle = middle(save10averages); + + *mStream<<"| *Case no.* | *no. of saved activity in one measure* | *Midle time [ms]* |\n"; + *mStream<<"| 1 | 1 | "<flush(); +} + +void MeasureTest::logGetSummary(const QList& get1, const QList& get2 , const QList& get3) +{ + *mStream<<"---++++ Midle time of get activity - the faster and the slowest result has been rejected.\n\n"; + + QList get1averages; + QList get2averages; + QList get3averages; + + for(int i=0; i& reslist = mResultsList.at(get1.at(i)); + if(reslist.count()==KDefaultTimes+1) { + get1averages.append(reslist.at(KDefaultTimes)); + } + } + + for(int i=0; i& reslist = mResultsList.at(get2.at(i)); + if(reslist.count()==KDefaultTimes+1) { + get2averages.append(reslist.at(KDefaultTimes)); + } + } + + for(int i=0; i& reslist = mResultsList.at(get3.at(i)); + if(reslist.count()==KDefaultTimes+1) { + get3averages.append(reslist.at(KDefaultTimes)); + } + } + QString get1middle = middle(get1averages); + QString get2middle = middle(get2averages); + QString get3middle = middle(get3averages); + + *mStream<<"| *Case no.* | *Data size [KB]* | *Midle time [ms]* |\n"; + *mStream<<"| 1 | 10 | "<flush(); +} + +void MeasureTest::enableControls(bool enable) +{ + mSaveOneButton->setEnabled(enable); + mSaveMoreButton->setEnabled(enable); + mGetButton->setEnabled(enable); + mAllButton->setEnabled(enable); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/actautobenchmark/hbmeasuretest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/actautobenchmark/hbmeasuretest.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,117 @@ +/* +* 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: +* +*/ +#ifndef MEASURETEST_H +#define MEASURETEST_H + +#include +#include +#include +#include + +class HbLabel; +class QString; +class ActivityClient; +class QPixmap; +class QByteArray; +class QVariant; +class HbComboBox; +class QGraphicsGridLayout; +class HbPushButton; +class QByteArray; +class QFile; +class QTextStream; +class HbCheckBox; +class AfActivityStorage; +class AfActivation; +class QTimer; + +class MeasureTest: public HbView +{ + + Q_OBJECT + +public: + MeasureTest(QGraphicsItem *parent = 0); + ~MeasureTest(); + +private slots: + void saveOne(); + void saveMore(); + void getOne(); + void all(); + + void timeout(); + void preClear(); + void startTimer(); + +private: + void Before(); + void After(); + void Result(); + int average(const QList& list); + int writeResults(const QList& list, int average); + void logError(const QString& mess); + + bool saveBytes(int bytes); + bool deleteActivities(); + bool saveOneInLoop(int action); + bool saveMoreInLoop(int action); + bool getOneInLoop(int bytes, int action); + + void logResult(); + void logResult(const QList& indexes, int caseno, const QString& mess, const QString& type); + QString middle(const QList& list); + void logSaveSummary(const QList& indexes1, const QList& indexes10); + void logGetSummary(const QList& get1, const QList& get2 , const QList& get3); + + void enableControls(bool enable); + + +private: + HbLabel *mResultLabel; + HbLabel *mItemLabel; + QString mItemMessage; + QString mResultMessage; + + QGraphicsGridLayout *mLayout; + HbPushButton *mSaveOneButton; + HbPushButton *mSaveMoreButton; + HbPushButton *mGetButton; + HbPushButton *mAllButton; + + QByteArray *mByteArray; + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + + + QFile* mFile; + QTextStream* mStream; + + AfActivityStorage* mActivityStorage; + AfActivation* mActivation; + QObject *mActivityManager; + + QList mActionsList; + QList > mResultsList; + + QTimer* mTimer; + int mActionCounter; + +}; + +#endif //MEASURETEST_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/actautobenchmark/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/actautobenchmark/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include + +#include "hbmeasuretest.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MeasureTest *view = new MeasureTest; + + HbMainWindow window; + window.addView(view); + window.show(); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/activitytestanimal.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestanimal/activitytestanimal.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,8 @@ + + + images/africaelephant.jpg + images/africatiger.jpg + images/indiaelephant.jpg + images/syberiantiger.jpg + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/acttestanimal.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestanimal/acttestanimal.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = acttestanimal + +CONFIG += console mobility +MOBILITY = serviceframework + +SOURCES += main.cpp \ + animalwidget.cpp \ + +HEADERS += animalwidget.h \ + +RESOURCES += activitytestanimal.qrc + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x800000 // Min 2Mb, max 8Mb +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/animalwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestanimal/animalwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,146 @@ +/* +* 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 "animalwidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include "afstorageglobals.h" + +QTM_USE_NAMESPACE + +AnimalWidget::AnimalWidget(QWidget *parent) : QWidget(parent) +{ + QServiceManager serviceManager; + mActivityStorage = serviceManager.loadInterface("com.nokia.qt.activities.Storage"); + if (!mActivityStorage) { + qFatal("load Storage plugin failed"); + } + + mActivaction = serviceManager.loadInterface("com.nokia.qt.activities.Activation"); + if (!mActivaction) { + qFatal("load Activation plugin failed"); + } + + qRegisterMetaType("Af::ActivationReason"); + connect(mActivaction, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivity(Af::ActivationReason, QString, QVariantHash))); + + + mAnimalLabel = new QLabel(); + mFileNameLabel = new QLabel("No image loaded"); + QPushButton *africanElephantButton = new QPushButton("African elephant"); + QPushButton *africanTigerButton = new QPushButton("African tiger"); + QPushButton *indiaElephantButton = new QPushButton("India elephant"); + QPushButton *siberianTigerButton = new QPushButton("Siberian tiger"); + QPushButton *saveActivityButton = new QPushButton("Save activity"); + QPushButton *quitButton = new QPushButton("Quit"); + + QGridLayout *layout = new QGridLayout(); + + layout->addWidget(mAnimalLabel, 0, 0, 1, 2); + layout->addWidget(mFileNameLabel, 1, 0, 1, 2); + layout->addWidget(africanElephantButton, 2, 0); + layout->addWidget(africanTigerButton, 2, 1); + layout->addWidget(indiaElephantButton, 3, 0); + layout->addWidget(siberianTigerButton, 3, 1); + layout->addWidget(saveActivityButton, 4, 0); + layout->addWidget(quitButton, 4, 1); + + connect(saveActivityButton, SIGNAL(clicked()), this, SLOT(saveActivity())); + connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); + + QSignalMapper *mapper = new QSignalMapper(this); + mapper->setMapping(africanElephantButton, ":/images/africaelephant.jpg"); + mapper->setMapping(africanTigerButton, ":/images/africatiger.jpg"); + mapper->setMapping(indiaElephantButton, ":/images/indiaelephant.jpg"); + mapper->setMapping(siberianTigerButton, ":/images/syberiantiger.jpg"); + connect(africanElephantButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(africanTigerButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(indiaElephantButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(siberianTigerButton, SIGNAL(clicked()), mapper, SLOT(map())); + + connect(mapper, SIGNAL(mapped(QString)), this, SLOT(changeAnimalImage(QString))); + + setLayout(layout); + + //startup case + Af::ActivationReason reason; + bool ok = QMetaObject::invokeMethod(mActivaction, "reason", Q_RETURN_ARG(Af::ActivationReason, reason)); + if (!ok) { + qFatal("Get reason failed"); + } + QString actName; + QVariantHash parameters; + if (reason == Af::ActivationReasonActivity) { + ok = QMetaObject::invokeMethod(mActivaction, "name", Q_RETURN_ARG(QString, actName)); + if (!ok) { + qFatal("Get name failed"); + } + ok = QMetaObject::invokeMethod(mActivaction, "parameters", Q_RETURN_ARG(QVariantHash, parameters)); + if (!ok) { + qFatal("Get parameter failed"); + } + + QVariant data; + ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actName)); + if (!ok) { + qFatal("Get data failed"); + } + changeAnimalImage(data.toString()); + } + //startup case end +} + +AnimalWidget::~AnimalWidget() +{ + delete mActivityStorage; + delete mActivaction; +} + +void AnimalWidget::changeAnimalImage(const QString &image) +{ + mAnimalLabel->setPixmap(QPixmap(image).scaled(QSize( 200, 300), Qt::KeepAspectRatio)); + mFileNameLabel->setText(image); + mCurrentImage = image; +} + +void AnimalWidget::saveActivity() +{ + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, *mAnimalLabel->pixmap()); + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityStorage, "saveActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, "Activities - pure Qt"), Q_ARG(QVariant, QVariant(mCurrentImage)), Q_ARG(QVariantHash, metadata)); + if (!ok || !retok) { + qFatal("Save failed"); + } +} + +void AnimalWidget::loadActivity(Af::ActivationReason reason, const QString &name, QVariantHash parameter) +{ + QVariant data; + bool ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + qFatal("Get data failed"); + } + changeAnimalImage(data.toString()); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/animalwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestanimal/animalwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ +#ifndef ANIMALWIDGET_H +#define ANIMALWIDGET_H + +#include +#include +#include + +class QLabel; +class QString; + +class AnimalWidget: public QWidget +{ + + Q_OBJECT + +public: + AnimalWidget(QWidget *parent = 0); + ~AnimalWidget(); + +private slots: + void changeAnimalImage(const QString &image); + void saveActivity(); + void loadActivity(Af::ActivationReason reason, const QString &name, QVariantHash parameter); + +private: + QLabel *mAnimalLabel; + QLabel *mFileNameLabel; + QString mCurrentImage; + QObject *mActivityStorage; + QObject *mActivaction; +}; + +#endif //ANIMALWIDGET_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/images/africaelephant.jpg Binary file activityfw/testapplications/newtestappset/acttestanimal/images/africaelephant.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/images/africatiger.jpg Binary file activityfw/testapplications/newtestappset/acttestanimal/images/africatiger.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/images/indiaelephant.jpg Binary file activityfw/testapplications/newtestappset/acttestanimal/images/indiaelephant.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/images/syberiantiger.jpg Binary file activityfw/testapplications/newtestappset/acttestanimal/images/syberiantiger.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestanimal/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestanimal/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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 + +#include "animalwidget.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AnimalWidget widget; + widget.setMaximumSize(360,640); + widget.setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + widget.showMaximized(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestbenchmark/acttestbenchmark.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestbenchmark/acttestbenchmark.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = acttestbenchmark + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ + hbmeasuretest.cpp \ + +HEADERS += hbmeasuretest.h \ + +RESOURCES += hbmeasuretest.qrc + +LIBS += -lafservice.dll \ + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x2000000 // Min 2Mb, max 32Mb + TARGET.CAPABILITY = ALL -TCB +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestbenchmark/hbmeasuretest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestbenchmark/hbmeasuretest.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,603 @@ +/* +* 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 "hbmeasuretest.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "afstorageglobals.h" +#include + + +QTM_USE_NAMESPACE + +MeasureTest::MeasureTest(QGraphicsItem *parent) : HbView(parent), mByteArray(NULL) + +{ + mFile = new QFile("c:\\actbenchmark.txt"); + mFile->open(QIODevice::Append | QIODevice::Text); + mStream = new QTextStream(mFile); + + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + QServiceManager serviceManager; + serviceManager.addService(":/activityserviceplugin.xml"); + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service."); + } + + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + mActivityStorage = new AfActivityStorage; + mActivation = new AfActivation; + + HbWidget* widget = new HbWidget; + HbScrollArea* scrollArea = new HbScrollArea; + + mResultLabel = new HbLabel(); + mItemLabel = new HbLabel(); + mTimesLabel = new HbLabel("Times"); + mBytesLabel = new HbLabel("Bytes"); + mPixmapLabel = new HbLabel("Pixmap"); + mSizeLabel = new HbLabel("Size(WxH)"); + + mPixmap = new QPixmap(":/images/wolf.bmp"); + mEmptyPixmap = new QPixmap(); + + + mTimesCombo = new HbComboBox(); + mLengthCombo = new HbComboBox(); + mPixmapCombo = new HbComboBox(); + mWidthCombo = new HbComboBox(); + mHeightCombo = new HbComboBox(); + + mTimesCombo->addItem("1"); + mTimesCombo->addItem("2"); + mTimesCombo->addItem("4"); + mTimesCombo->addItem("5"); + mTimesCombo->addItem("10"); + mTimesCombo->addItem("20"); + mTimesCombo->addItem("40"); + mTimesCombo->addItem("60"); + + QVariant variant; + variant = 10; + mLengthCombo->addItem("10 B", variant); + variant = 100; + mLengthCombo->addItem("100 B", variant); + variant = 1024; + mLengthCombo->addItem("1 KB", variant); + variant = 10240; + mLengthCombo->addItem("10 KB", variant); + variant = 102400; + mLengthCombo->addItem("100 KB", variant); + variant = 1024*1024; + mLengthCombo->addItem("1 MB", variant); + + mWidthCombo->addItem("360"); + mWidthCombo->addItem("180"); + mWidthCombo->addItem("128"); + mWidthCombo->addItem("90"); + + mHeightCombo->addItem("640"); + mHeightCombo->addItem("320"); + mHeightCombo->addItem("160"); + mHeightCombo->addItem("128"); + + + mPixmapCombo->addItem("no"); + mPixmapCombo->addItem("yes"); + mPixmapCombo->addItem("grab"); + + mSaveButton = new HbPushButton("Save activities"); + mGetButton = new HbPushButton("Get activities"); + mDelButton = new HbPushButton("Delete activities"); + mGetDataButton = new HbPushButton("Get activities data"); + mUpdateButton = new HbPushButton("Reserved"); + mThumbButton = new HbPushButton("Get act with thumb"); + mGetDataTimesButton = new HbPushButton("Get data times"); + mSaveTimesButton = new HbPushButton("Add act times"); + mSave10TimesButton = new HbPushButton("Add 10 act times");; + + mSaveDekCheckBox = new HbCheckBox("Delete before Save"); + mSaveDekCheckBox->setCheckState(Qt::Checked); + + mLayout = new QGraphicsGridLayout(); + mLayout->addItem(mSizeLabel, 2, 0, 1, 2); + mLayout->addItem(mWidthCombo, 2, 2, 1, 2); + mLayout->addItem(mHeightCombo, 2, 4, 1, 2); + mLayout->addItem(mTimesLabel, 3, 0, 1, 2); + mLayout->addItem(mBytesLabel, 3, 2, 1, 2); + mLayout->addItem(mPixmapLabel, 3, 4, 1, 2); + mLayout->addItem(mTimesCombo, 4, 0, 1, 2); + mLayout->addItem(mLengthCombo, 4, 2, 1, 2); + mLayout->addItem(mPixmapCombo, 4, 4, 1, 2); + mLayout->addItem(mSaveButton, 5, 0, 1, 6); + mLayout->addItem(mGetButton, 6, 0, 1, 6); + mLayout->addItem(mDelButton, 7, 0, 1, 6); + mLayout->addItem(mGetDataButton, 8, 0, 1, 6); + mLayout->addItem(mUpdateButton, 9, 0, 1, 6); + mLayout->addItem(mThumbButton, 10, 0, 1, 6); + mLayout->addItem(mSaveTimesButton, 11, 0, 1, 6); + mLayout->addItem(mSave10TimesButton, 12, 0, 1, 6); + mLayout->addItem(mGetDataTimesButton, 13, 0, 1, 6); + mLayout->addItem(mSaveDekCheckBox, 14, 0, 1, 6); + widget->setLayout(mLayout); + + scrollArea->setContentWidget(widget); + scrollArea->setScrollDirections(Qt::Vertical); + scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity())); + connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity())); + connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity())); + connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData())); + connect(mUpdateButton, SIGNAL(released()), this, SLOT(updateActivity())); + connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb())); + connect(mGetDataTimesButton, SIGNAL(released()), this, SLOT(getTimesActivityData())); + connect(mSaveTimesButton, SIGNAL(released()), this, SLOT(saveTimes())); + connect(mSave10TimesButton, SIGNAL(released()), this, SLOT(save10actTimes())); + + QGraphicsGridLayout* mainLayout = new QGraphicsGridLayout; + mainLayout->addItem(mResultLabel, 0, 0, 1, 6); + mainLayout->addItem(mItemLabel, 1, 0, 1, 6); + mainLayout->addItem(scrollArea, 2, 0, 1, 6); + setLayout(mainLayout); + +} + +MeasureTest::~MeasureTest() +{ + delete mFile; + delete mStream; + delete mEmptyPixmap; + delete mPixmap; + delete mActivityManager; + delete mActivityStorage; + delete mActivation; +} + + +void MeasureTest::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void MeasureTest::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void MeasureTest::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + +void MeasureTest::deleteActivity() +{ + QStringList activities = mActivityStorage->allActivities(); + QString name; + Before(); + bool ok = false; + for (int i=0; iremoveActivity(activities.at(i)); + if (!ok) { + break; + } + } + After(); + Result(); + + mItemMessage.clear(); + mResultMessage.clear(); + + if (!ok) { + mItemMessage = (tr("invoke error")); + mResultMessage = (tr("invoke error")); + } else { + mItemMessage = (tr("items: %1")).arg(activities.count()); + mResultMessage = (tr("time: %1 ms")).arg(iResult); + } + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::getActivity() +{ + QStringList activities; + Before(); + activities = mActivityStorage->allActivities(); + After(); + Result(); + int count = activities.count(); + mItemMessage.clear(); + mResultMessage.clear(); + + mItemMessage = (tr("items: %1")).arg(count); + mResultMessage = (tr("time: %1 ms")).arg(iResult); + + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::getActivityThumb() +{ + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + bool ok = false; + QStringList activities; + Before(); + activities = mActivityStorage->allActivities(); + mThumbwait = activities.count(); + int width = mWidthCombo->currentText().toInt(); + int height = mHeightCombo->currentText().toInt(); + QSize pixSize(width, height); + for ( int i=0; iactivityMetaData(activities.at(i)).value(ActivityScreenshotKeyword).toString(); + ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, NULL)); + if ( !ok ) + { + break; + } + } + + int count = activities.count(); + mItemMessage.clear(); + mResultMessage.clear(); + if (!ok) { + mItemMessage = (tr("invoke error")); + mResultMessage = (tr("invoke error")); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + } else { + + } +} + +void MeasureTest::saveActivity() +{ + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + Before(); + for (int i=0; isaveActivity(name, variant, metadata); + if (!ok) { + break; + } + } + After(); + Result(); + mItemMessage.clear(); + mResultMessage.clear(); + if (!ok) { + mItemMessage = (tr("invoke error")); + mResultMessage = (tr("invoke error")); + } else { + mResultMessage = (tr("time: %1 ms")).arg(iResult); + } + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::updateActivity() +{ + +} + +void MeasureTest::getActivityData() +{ + QStringList activities = mActivityStorage->allActivities(); + + QString name; + QVariant data; + Before(); + for (int i=0; iactivityData(activities.at(i)); + } + After(); + Result(); + + mItemMessage.clear(); + mResultMessage.clear(); + + mItemMessage = (tr("items: %1")).arg(activities.count()); + mResultMessage = (tr("time: %1 ms")).arg(iResult); + + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::thumbnailReady(QPixmap pix, void * ptr) + { + if ( pix.isNull() ) + { + mThumbnull++; + } + mThumbcurrent++; + mItemMessage = (tr("items: %1 from %2, but null %3")).arg(mThumbcurrent).arg(mThumbwait).arg(mThumbnull); + mItemLabel->setPlainText(mItemMessage); + mResultMessage = ""; + mResultLabel->setPlainText(mResultMessage); + if (mThumbcurrent == mThumbwait) + { + After(); + Result(); + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + mResultMessage = (tr("time: %1 ms")).arg(iResult); + mResultLabel->setPlainText(mResultMessage); + } + } +void MeasureTest::saveTimes() +{ + *mStream<<"save Times\n"; + QList trymeasure; + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + QString name("0"); + bool delBefore = mSaveDekCheckBox->checkState() == Qt::Checked ? true : false; + User::After(2000000); //2s + for (int i=0; isaveActivity(name, variant, metadata); + After(); + Result(); + if (!ok) { + break; + } + trymeasure.append(iResult); + if (delBefore) { + ok = mActivityStorage->removeActivity(name); + if (!ok) { + break; + } + } + User::After(2000000); //2s + } + + mItemMessage.clear(); + mResultMessage.clear(); + if (!ok) { + mItemMessage = (tr("invoke error")); + mResultMessage = (tr("invoke error")); + *mStream<<"error\n"; + } else { + int averageint = average(trymeasure); + mResultMessage = (tr("time: %1 ms")).arg(averageint); + writeResults(trymeasure, averageint); + } + mStream->flush(); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); +} + +void MeasureTest::save10actTimes() +{ + *mStream<<"save 10 act Times\n"; + QList trymeasure; + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + bool delBefore = mSaveDekCheckBox->checkState() == Qt::Checked ? true : false; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + QString name; + User::After(2000000); //2s + for(int i=0; isaveActivity(name, variant, metadata); + if (!ok) { + break; + } + } + After(); + Result(); + trymeasure.append(iResult); + + QStringList activities = mActivityStorage->allActivities(); + + if (delBefore) { + for (int i=0; iremoveActivity(activities.at(i)); + if (!ok) { + break; + } + } + } + User::After(2000000); //2s + + } + mItemMessage.clear(); + mResultMessage.clear(); + if (!ok) { + mItemMessage = (tr("invoke error")); + mResultMessage = (tr("invoke error")); + *mStream<<"error\n"; + } else { + int averageint = average(trymeasure); + mResultMessage = (tr("time: %1 ms")).arg(averageint); + writeResults(trymeasure, averageint); + } + mStream->flush(); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + +} + +void MeasureTest::getTimesActivityData() +{ + int times = 0; + times = mTimesCombo->currentText().toInt(); + *mStream<<"get data Times\n"; + QList trymeasure; + + QStringList activities = mActivityStorage->allActivities(); + User::After(2000000); //2s + QString name; + QVariant data; + for(int i=0; iactivityData(activities.at(i)); + } + After(); + Result(); + trymeasure.append(iResult); + User::After(2000000); //2s + } + mItemMessage.clear(); + mResultMessage.clear(); + + + int averageint = average(trymeasure); + mResultMessage = (tr("time: %1 ms")).arg(averageint); + writeResults(trymeasure, averageint); + + mStream->flush(); + mItemLabel->setPlainText(mItemMessage); + mResultLabel->setPlainText(mResultMessage); + +} + +int MeasureTest::average(const QList& list) +{ + int count = list.count(); + int sum=0; + for(int i=0; i& list, int average) +{ + for(int i=0; i +#include +#include + +class HbLabel; +class QString; +class ActivityClient; +class QPixmap; +class QByteArray; +class QVariant; +class HbComboBox; +class QGraphicsGridLayout; +class HbPushButton; +class QByteArray; +class QFile; +class QTextStream; +class HbCheckBox; +class AfActivityStorage; +class AfActivation; + +class MeasureTest: public HbView +{ + + Q_OBJECT + +public: + MeasureTest(QGraphicsItem *parent = 0); + ~MeasureTest(); + +private slots: + void saveActivity(); + void deleteActivity(); + void getActivity(); + void getActivityData(); + void updateActivity(); + void getActivityThumb(); + void saveTimes(); + void save10actTimes(); + void getTimesActivityData(); + + void thumbnailReady(QPixmap pix, void * ptr); + +private: + void Before(); + void After(); + void Result(); + int average(const QList& list); + int writeResults(const QList& list, int average); + + +private: + HbLabel *mResultLabel; + HbLabel *mItemLabel; + HbLabel *mTimesLabel; + HbLabel *mPixmapLabel; + HbLabel *mBytesLabel; + HbLabel *mTypeLabel; + HbLabel *mSizeLabel; + QString mItemMessage; + QString mResultMessage; + QPixmap *mPixmap; + QPixmap *mEmptyPixmap; + HbComboBox *mTimesCombo; + HbComboBox *mLengthCombo; + HbComboBox *mPixmapCombo; + HbComboBox *mWidthCombo; + HbComboBox *mHeightCombo; + QGraphicsGridLayout *mLayout; + HbPushButton *mSaveButton; + HbPushButton *mDelButton; + HbPushButton *mGetButton; + HbPushButton *mGetDataButton; + HbPushButton *mUpdateButton; + HbPushButton *mThumbButton; + HbPushButton *mGetDataTimesButton; + HbPushButton *mSaveTimesButton; + HbPushButton *mSave10TimesButton; + HbCheckBox* mSaveDekCheckBox; + QByteArray *mByteArray; + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + + int mThumbwait; + int mThumbnull; + int mThumbcurrent; + QFile* mFile; + QTextStream* mStream; + + AfActivityStorage* mActivityStorage; + AfActivation* mActivation; + QObject *mActivityManager; + +}; + +#endif //MEASURETEST_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestbenchmark/hbmeasuretest.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestbenchmark/hbmeasuretest.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,6 @@ + + + images/wolf.bmp + ../../../activityserviceplugin/data/afservice.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestbenchmark/images/wolf.bmp Binary file activityfw/testapplications/newtestappset/acttestbenchmark/images/wolf.bmp has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestbenchmark/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestbenchmark/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include + +#include "hbmeasuretest.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MeasureTest *view = new MeasureTest; + + HbMainWindow window; + window.addView(view); + window.show(); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,528 @@ +/* +* 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 "activitydebuger.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "activitydebugerconsole.h" + +#include +#include +#include "afstorageglobals.h" + + +QTM_USE_NAMESPACE + +ActivityDebuger::ActivityDebuger(QGraphicsItem *parent) : HbView(parent), mByteArray(NULL) +{ + mThumbwait = 0; + mThumbnull = 0; + mThumbcurrent = 0; + QServiceManager serviceManager; + serviceManager.addService(":/activityserviceplugin.xml"); + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service."); + } + + mActivityStorage = new AfActivityStorage; + mActivation = new AfActivation; + qRegisterMetaType("Af::ActivationReason"); + connect(mActivation, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivityData(Af::ActivationReason, QString, QVariantHash))); + + + mTimesLabel = new HbLabel("Times"); + mBytesLabel = new HbLabel("Bytes"); + mPixmapLabel = new HbLabel("Pixmap"); + mSizeLabel = new HbLabel("Size(WxH)"); + + mPixmap = new QPixmap(":/images/wolf.bmp"); + mPixmap2 = new QPixmap(":/images/bird.bmp"); + mEmptyPixmap = new QPixmap(); + + + mTimesCombo = new HbComboBox(); + mLengthCombo = new HbComboBox(); + mPixmapCombo = new HbComboBox(); + mWidthCombo = new HbComboBox(); + mHeightCombo = new HbComboBox(); + + mTimesCombo->addItem("1"); + mTimesCombo->addItem("2"); + mTimesCombo->addItem("4"); + mTimesCombo->addItem("5"); + mTimesCombo->addItem("10"); + mTimesCombo->addItem("20"); + mTimesCombo->addItem("40"); + mTimesCombo->addItem("60"); + + QVariant variant; + variant = 10; + mLengthCombo->addItem("10 B", variant); + variant = 100; + mLengthCombo->addItem("100 B", variant); + variant = 1024; + mLengthCombo->addItem("1 KB", variant); + variant = 10240; + mLengthCombo->addItem("10 KB", variant); + variant = 102400; + mLengthCombo->addItem("100 KB", variant); + variant = 1024*1024; + mLengthCombo->addItem("1 MB", variant); + + mWidthCombo->addItem("360"); + mWidthCombo->addItem("180"); + mWidthCombo->addItem("128"); + mWidthCombo->addItem("90"); + + mHeightCombo->addItem("640"); + mHeightCombo->addItem("320"); + mHeightCombo->addItem("160"); + mHeightCombo->addItem("128"); + + + mPixmapCombo->addItem("no"); + mPixmapCombo->addItem("yes"); + mPixmapCombo->addItem("grab"); + + mSaveButton = new HbPushButton("Save"); + mGetButton = new HbPushButton("Activities"); + mDelButton = new HbPushButton("Delete"); + mGetDataButton = new HbPushButton("Get data"); + mGetMyButton = new HbPushButton("Get my"); + mThumbButton = new HbPushButton("Get pixmaps"); + mClearButton = new HbPushButton("Clear"); + mDelMyButton = new HbPushButton("Reserved"); + + mConsole = new ActivityDebugerConsole; + + mLayout = new QGraphicsGridLayout(); + mLayout->addItem(mConsole, 0, 0, 3, 6); + mLayout->addItem(mSizeLabel, 3, 0, 1, 2); + mLayout->addItem(mWidthCombo, 3, 2, 1, 2); + mLayout->addItem(mHeightCombo, 3, 4, 1, 2); + mLayout->addItem(mTimesLabel, 4, 0, 1, 2); + mLayout->addItem(mBytesLabel, 4, 2, 1, 2); + mLayout->addItem(mPixmapLabel, 4, 4, 1, 2); + mLayout->addItem(mTimesCombo, 5, 0, 1, 2); + mLayout->addItem(mLengthCombo, 5, 2, 1, 2); + mLayout->addItem(mPixmapCombo, 5, 4, 1, 2); + mLayout->addItem(mClearButton, 6, 0, 1, 3); + mLayout->addItem(mGetDataButton, 6, 3, 1, 3); + mLayout->addItem(mSaveButton, 7, 0, 1, 3); + mLayout->addItem(mGetMyButton, 7, 3, 1, 3); + mLayout->addItem(mGetButton, 8, 0, 1, 2); + mLayout->addItem(mThumbButton, 8, 2, 1, 4); + mLayout->addItem(mDelButton, 9, 0, 1, 3); + mLayout->addItem(mDelMyButton, 9, 3, 1, 3); + + + + setLayout(mLayout); + + connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity())); + connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity())); + connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity())); + connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData())); + connect(mGetMyButton, SIGNAL(released()), this, SLOT(getMyActivity())); + connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb())); + connect(mClearButton, SIGNAL(released()), mConsole, SLOT(clear())); + + + +} + +ActivityDebuger::~ActivityDebuger() +{ + delete mEmptyPixmap; + delete mPixmap; + delete mPixmap2; + delete mActivityManager; + delete mActivityStorage; + delete mActivation; +} + + +void ActivityDebuger::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void ActivityDebuger::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void ActivityDebuger::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + +void ActivityDebuger::deleteActivity() +{ + mItemMeaage.clear(); + mItemMeaage += "***Remove all:\n"; + QStringList activities = mActivityStorage->allActivities(); + + int items = 0; + bool ok = false; + QString actname; + for (int i=0; iremoveActivity(actname); + + mItemMeaage += "*"; + mItemMeaage += actname; + mItemMeaage += "; "; + QString res; + res.setNum(ok); + mItemMeaage += res; + + mItemMeaage += "*\n"; + + items++; + } + mItemMeaage += tr("*Items %1*\n").arg(items); + + UpdateConsole(); + +} + +void ActivityDebuger::getActivity() +{ + mItemMeaage.clear(); + mItemMeaage += "***Activities list:\n"; + bool ok = false; + QList activities; + ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList, activities)); + if ( ok ) + { + int items = 0; + for ( int i=0; i activities; + + ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList, activities)); + if ( ok ) + { + mThumbwait = activities.count(); + int width = mWidthCombo->currentText().toInt(); + int height = mHeightCombo->currentText().toInt(); + QSize pixSize(width, height); + for ( int i=0; i(i); + ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, userdata)); + } + + mItemMeaage = "*"; + QString aid; + aid.setNum(appid); + mItemMeaage += aid; + mItemMeaage += "; "; + mItemMeaage += actname; + mItemMeaage += "; "; + QString locid = tr("locid=%1").arg(i); + mItemMeaage += locid; + mItemMeaage += "; "; + QString res; + res.setNum(ok); + mItemMeaage += res; + mItemMeaage += "*\n"; + UpdateConsole(); + } + } + else + { + mItemMeaage += "*Failed*\n"; + UpdateConsole(); + } + +} + +void ActivityDebuger::saveActivity() +{ + mItemMeaage.clear(); + mItemMeaage += "***Save:\n"; + int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt(); + delete mByteArray; + mByteArray = NULL; + mByteArray = new QByteArray(bytes, 'a'); + QVariant variant; + variant = *mByteArray; + QPixmap *pixmap = NULL; + QPixmap screenshot; + if (mPixmapCombo->currentText() == "yes") { + pixmap = mPixmap; + } + else if ( mPixmapCombo->currentText() == "grab" ) + { + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + pixmap = &screenshot; + } + else + { + pixmap = mEmptyPixmap; + } + + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, *pixmap); + int times = 0; + times = mTimesCombo->currentText().toInt(); + bool ok = false; + int items = 0; + for (int i=0; isaveActivity(name, variant, metadata); + mItemMeaage += "*"; + mItemMeaage += name; + mItemMeaage += "; "; + QString res; + res.setNum(ok); + mItemMeaage += res; + mItemMeaage += "*\n"; + + items++; + } + mItemMeaage += tr("*Items %1*\n").arg(items); + UpdateConsole(); +} + +void ActivityDebuger::getMyActivity() +{ + mItemMeaage.clear(); + mItemMeaage += "***Get my activities:\n"; + QStringList activities = mActivityStorage->allActivities(); + QString name; + QVariantHash data; + int items = 0; + for (int i=0; iactivityMetaData(activities.at(i)); + getMetadata(data); + items++; + } + mItemMeaage += tr("*Items %1*\n").arg(items); + UpdateConsole(); +} + +void ActivityDebuger::getActivityData() +{ + mItemMeaage.clear(); + mItemMeaage += "***Activities data:\n"; + QStringList activities = mActivityStorage->allActivities(); + + QString name; + QVariant data; + int items = 0; + for (int i=0; iactivityData(activities.at(i)); + const char* type = data.typeName(); + QString dtype(type); + items++; + + mItemMeaage += "*"; + mItemMeaage += name; + mItemMeaage += "; "; + mItemMeaage += dtype; + mItemMeaage += "; "; + mItemMeaage += "*\n"; + } + mItemMeaage += tr("*Items %1*\n").arg(items); + + UpdateConsole(); +} + +void ActivityDebuger::thumbnailReady(QPixmap pix, void * ptr) + { + mItemMeaage.clear(); + QString pixsize; + if ( pix.isNull() ) + { + mThumbnull++; + pixsize = "null"; + } + else + { + QSize size = pix.size(); + int w = size.width(); + int h = size.height(); + pixsize = tr("%1x%2").arg(w).arg(h); + } + int loc_id = reinterpret_cast(ptr); + QString locid; + locid = tr("locid=%1").arg(loc_id); + mThumbcurrent++; + + mItemMeaage += "*"; + mItemMeaage += locid; + mItemMeaage += "; "; + mItemMeaage += pixsize; + mItemMeaage += "*\n"; + + if (mThumbcurrent == mThumbwait) + { + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + QString screennum = tr("*screennum: %1*\n").arg(mThumbwait); + mItemMeaage += screennum; + } + UpdateConsole(); + } + +void ActivityDebuger::UpdateConsole() + { + mConsole->appendText(mItemMeaage); + mConsole->scrollToBotton(); + } + +void ActivityDebuger::loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter) +{ + mItemMeaage.clear(); + mItemMeaage += "***Activity requested:\n"; + int reasonint = static_cast(reason); + QString reasonstring; + reasonstring.setNum(reasonint); + int parametercount = parameter.count(); + QString parametercountstring;; + parametercountstring.setNum(parametercount); + + + mItemMeaage += "*"; + mItemMeaage += name; + mItemMeaage += "; "; + mItemMeaage += reasonstring; + mItemMeaage += "; "; + mItemMeaage += parametercountstring; + mItemMeaage += "*\n"; + + UpdateConsole(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,109 @@ +/* +* 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: +* +*/ +#ifndef ACTIVITYDEBUGER_H +#define ACTIVITYDEBUGER_H + +#include +#include +#include +#include + +class HbLabel; +class QString; +class ActivityClient; +class QPixmap; +class QByteArray; +class QVariant; +class HbComboBox; +class QGraphicsGridLayout; +class HbPushButton; +class QByteArray; +class ActivityDebugerConsole; +class AfActivityStorage; +class AfActivation; + +class ActivityDebuger: public HbView +{ + + Q_OBJECT + +public: + ActivityDebuger(QGraphicsItem *parent = 0); + ~ActivityDebuger(); + +private slots: + void saveActivity(); + void deleteActivity(); + void getActivity(); + void getActivityData(); + void getMyActivity(); + void getActivityThumb(); + + void thumbnailReady(QPixmap pix, void * ptr); + void loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter); + +private: + void Before(); + void After(); + void Result(); + + void getMetadata(QVariantHash varianthash); + void UpdateConsole(); + + +private: + + HbLabel *mTimesLabel; + HbLabel *mPixmapLabel; + HbLabel *mBytesLabel; + HbLabel *mSizeLabel; + QString mItemMeaage; + QPixmap *mPixmap; + QPixmap *mPixmap2; + QPixmap *mEmptyPixmap; + HbComboBox *mTimesCombo; + HbComboBox *mLengthCombo; + HbComboBox *mPixmapCombo; + HbComboBox *mWidthCombo; + HbComboBox *mHeightCombo; + QGraphicsGridLayout *mLayout; + HbPushButton *mSaveButton; + HbPushButton *mDelButton; + HbPushButton *mDelMyButton; + HbPushButton *mGetButton; + HbPushButton *mGetDataButton; + HbPushButton *mGetMyButton; + HbPushButton *mThumbButton; + HbPushButton *mClearButton; + QByteArray *mByteArray; + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + + int mThumbwait; + int mThumbnull; + int mThumbcurrent; + + ActivityDebugerConsole* mConsole; + + AfActivityStorage* mActivityStorage; + AfActivation* mActivation; + QObject *mActivityManager; + +}; + +#endif //ACTIVITYDEBUGER_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + images/wolf.bmp + images/bird.bmp + ../../../activityserviceplugin/data/afservice.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/activitydebugerconsole.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/activitydebugerconsole.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,67 @@ +/* +* 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 "activitydebugerconsole.h" +#include + + + + + +ActivityDebugerConsole::ActivityDebugerConsole(QGraphicsItem *parent):HbTextEdit(parent) +{ + setScrollable(true); + setReadOnly(true); + clearContextMenuFlag(Hb::ShowTextContextMenuOnLongPress); + clearContextMenuFlag(Hb::ShowTextContextMenuOnSelectionClicked); + connect( this, SIGNAL(contentsChanged()), this, SLOT(scrollToBotton())); +} + +ActivityDebugerConsole::~ActivityDebugerConsole() +{ + +} + + +void ActivityDebugerConsole::scrollToBotton() + { + HbScrollArea* scrollarea = scrollArea(); + QSizeF size = scrollarea->contentWidget()->size(); + QPointF point( 0, size.height() ); + scrollarea->scrollContentsTo(point); + scrollarea->ensureVisible(point); + } + +void ActivityDebugerConsole::appendText(const QString& text) + { + setPlainText(toPlainText()+text); + } + +void ActivityDebugerConsole::clear() + { + setPlainText(QString()); + } + +void ActivityDebugerConsole::mousePressEvent(QGraphicsSceneMouseEvent */*event*/) + { + + } + +void ActivityDebugerConsole::focusInEvent(QFocusEvent */*event*/) + { + + } diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/activitydebugerconsole.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/activitydebugerconsole.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef ACTIVITYDEBUGERCONSOLE_H +#define ACTIVITYDEBUGERCONSOLE_H + + +#include + + + +class ActivityDebugerConsole: public HbTextEdit +{ + + Q_OBJECT + +public: + ActivityDebugerConsole(QGraphicsItem *parent = 0); + ~ActivityDebugerConsole(); + void appendText(const QString& text); + + +public slots: + void clear(); + void scrollToBotton(); + +private: + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void focusInEvent(QFocusEvent *event); + +}; + +#endif //ACTIVITYDEBUGERCONSOLE_H diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/acttestdebugger.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/acttestdebugger.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = acttestdebugger + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ + activitydebuger.cpp \ + activitydebugerconsole.cpp + +HEADERS += activitydebuger.h \ + activitydebugerconsole.h + +RESOURCES += activitydebuger.qrc + +LIBS += -lafservice.dll \ + +symbian { + TARGET.EPOCHEAPSIZE=0x200000 0x2000000 // Min 2Mb, max 32Mb + TARGET.CAPABILITY = ALL -TCB +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/images/bird.bmp Binary file activityfw/testapplications/newtestappset/acttestdebugger/images/bird.bmp has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/images/wolf.bmp Binary file activityfw/testapplications/newtestappset/acttestdebugger/images/wolf.bmp has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include + +#include "activitydebuger.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + ActivityDebuger *view = new ActivityDebuger; + + HbMainWindow window; + window.addView(view); + window.show(); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestdebugger/readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestdebugger/readme.txt Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ + +Clear - clear console + +Get data - activities data (only this app) +Response format: +act name; data type; ok + +Add - add activities +Response format: +act name; ok + +Activities - activities list +Response format: +app id; act name; pixmap file; visibility flag; persistence; display name + +Get my - get activities list of this app +Response format: +app id; act name; pixmap file; visibility flag; persistence; display name + +Get pixmaps - activities pizmaps +Response format: +app id; act name; loc id;; ok +loc id; pixmap size + +Delete -deletes all activities +Response format: +app id; act name; ok \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/acttestfigure.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/acttestfigure.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = acttestfigure + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +squrewidget.cpp\ +trianglewidget.cpp\ +viewmanager.cpp\ +circlewidget.cpp\ +figurewidget.cpp + +HEADERS += squrewidget.h\ +trianglewidget.h\ +viewmanager.h\ +circlewidget.h\ +figurewidget.h + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} +LIBS += -lafservice \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/circlewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/circlewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,61 @@ +/* +* 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 "circlewidget.h" +#include +#include +#include +#include + + +circlewidget::circlewidget(QGraphicsItem *parent) + : figurewidget(parent) +{ + mGridLayout->addItem(mTriangle, 1, 0, 1, 1); + mGridLayout->addItem(mSqure, 1, 1, 1, 1); + + mColor = "blue"; + mNameCombo->addItem("Circle"); + + delete mCircle; + mCircle = NULL; +} + +circlewidget::~circlewidget() +{ +} + +void circlewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QRect rect(10, 10, 300, 300); + QPainterPath painterpath; + painterpath.addEllipse(rect); + painterpath.setFillRule(Qt::WindingFill); + + painter->setPen(Qt::black); + if (mColor == "red") { + painter->setBrush(Qt::red); + } else if (mColor == "green") { + painter->setBrush(Qt::green); + } else if (mColor == "blue") { + painter->setBrush(Qt::blue); + } else { + Q_ASSERT(false); + } + painter->drawPath(painterpath); + + figurewidget::paint(painter, option, widget); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/circlewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/circlewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef CIRCLEWIDGET_H_ +#define CIRCLEWIDGET_H_ + +#include +#include +#include +#include +#include +#include "figurewidget.h" + +class circlewidget: public figurewidget +{ + Q_OBJECT +public: + circlewidget(QGraphicsItem *parent = 0); + ~circlewidget(); +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); +}; + +#endif /* CIRCLEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/figurewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/figurewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,180 @@ +/* +* 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 "figurewidget.h" +#include +#include +#include +#include +#include +#include + +figurewidget::figurewidget(QGraphicsItem *parent) + : HbWidget(parent), mFailed(false) +{ + HbWidget* widget = new HbWidget; + HbScrollArea* scrollArea = new HbScrollArea; + mTriangle = new HbPushButton("Triangle"); + mSqure = new HbPushButton("Squre"); + mCircle = new HbPushButton("Circle"); + mRed = new HbPushButton("Red"); + mGreen = new HbPushButton("Green"); + mBlue = new HbPushButton("Blue"); + mSave = new HbPushButton("Save"); + mDelete = new HbPushButton("Delete"); + mVisibilityLabel = new HbLabel("Visibility"); + mVisibilityCombo = new HbComboBox(); + mVisibilityCombo->addItem("none"); + mVisibilityCombo->addItem("true"); + mVisibilityCombo->addItem("false"); + + mPersistentLabel = new HbLabel("Persistence"); + mPersistentCombo = new HbComboBox(); + mPersistentCombo->addItem("none"); + mPersistentCombo->addItem("true"); + mPersistentCombo->addItem("false"); + + mNameLabel = new HbLabel("Name"); + mNameCombo = new HbComboBox(); + mNameCombo->addItem("none"); + + mSaveDekCheckBox = new HbCheckBox("Delete before Save"); + mSaveDekCheckBox->setCheckState(Qt::Unchecked); + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mRed, 0, 0, 1, 1); + mGridLayout->addItem(mGreen, 0, 1, 1, 1); + mGridLayout->addItem(mBlue, 0, 2, 1, 1); + mGridLayout->addItem(mSave, 2, 0, 1, 1); + mGridLayout->addItem(mDelete, 2, 2, 1, 1); + mGridLayout->addItem(mVisibilityLabel, 3, 0, 1, 1); + mGridLayout->addItem(mVisibilityCombo, 3, 1, 1, 2); + mGridLayout->addItem(mPersistentLabel, 4, 0, 1, 1); + mGridLayout->addItem(mPersistentCombo, 4, 1, 1, 2); + mGridLayout->addItem(mNameLabel, 5, 0, 1, 1); + mGridLayout->addItem(mNameCombo, 5, 1, 1, 2); + mGridLayout->addItem(mSaveDekCheckBox, 6, 0, 1, 3); + + widget->setLayout(mGridLayout); + + scrollArea->setContentWidget(widget); + scrollArea->setScrollDirections(Qt::Vertical); + scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + + connect(mRed, SIGNAL(released()), this, SLOT(red())); + connect(mGreen, SIGNAL(released()), this, SLOT(green())); + connect(mBlue, SIGNAL(released()), this, SLOT(blue())); + + connect(mTriangle, SIGNAL(released()), this, SIGNAL(totriangle())); + connect(mSqure, SIGNAL(released()), this, SIGNAL(tosqure())); + connect(mCircle, SIGNAL(released()), this, SIGNAL(tocircle())); + + connect(mSave, SIGNAL(released()), this, SIGNAL(save())); + connect(mDelete, SIGNAL(released()), this, SIGNAL(del())); + + connect(mRed, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mGreen, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mBlue, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mSqure, SIGNAL(released()), this, SLOT(clearFailedFlag())); + connect(mTriangle, SIGNAL(released()), this, SLOT(clearFailedFlag())); + + QGraphicsGridLayout* mainLayout = new QGraphicsGridLayout; + mainLayout->addItem(scrollArea, 1, 0, 1, 6); + mainLayout->setRowFixedHeight(0, 250); + setLayout(mainLayout); +} + +figurewidget::~figurewidget() +{ +} + +void figurewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + HbWidget::paint(painter, option, widget); + + if ( mFailed ) { + painter->setPen(Qt::gray); + QFont font; + font.setPointSize(38); + font.setBold(true); + painter->setFont(font); + painter->drawText(10, 120, "*FAIL*"); + } +} + + +void figurewidget::red() +{ + mColor = "red"; + update(); +} + +void figurewidget::green() +{ + mColor = "green"; + update(); +} + +void figurewidget::blue() +{ + mColor = "blue"; + update(); +} + +void figurewidget::setcolor(const QString &color) +{ + mColor = color; +} + +QString figurewidget::color() +{ + return mColor; +} + +void figurewidget::clearFailedFlag() + { + mFailed = false; + update(); + } + +void figurewidget::setFailedFlag() + { + mFailed = true; + update(); + } + +QString figurewidget::visibility() +{ + return mVisibilityCombo->currentText(); +} + +QString figurewidget::persistent() +{ + return mPersistentCombo->currentText(); +} + +QString figurewidget::name() +{ + return mNameCombo->currentText(); +} + + +bool figurewidget::delBeforeSave() +{ + if (mSaveDekCheckBox->checkState() == Qt::Checked) { + return true; + } + return false; +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/figurewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/figurewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,82 @@ +/* +* 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: +* +*/ +#ifndef FIGUREWIDGET_H_ +#define FIGUREWIDGET_H_ + +#include +#include +#include +#include +#include +#include + +class HbComboBox; +class HbCheckBox; + +class figurewidget: public HbWidget +{ + Q_OBJECT +public: + figurewidget(QGraphicsItem *parent = 0); + ~figurewidget(); + void setcolor(const QString &color); + QString color(); + QString visibility(); + QString persistent(); + QString name(); + +protected: + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + QGraphicsGridLayout *mGridLayout; + HbPushButton *mTriangle; + HbPushButton *mSqure; + HbPushButton *mCircle; + HbPushButton *mRed; + HbPushButton *mGreen; + HbPushButton *mBlue; + HbPushButton *mSave; + HbPushButton *mDelete; + HbLabel* mVisibilityLabel; + HbLabel* mPersistentLabel; + HbLabel* mNameLabel; + HbComboBox *mVisibilityCombo; + HbComboBox *mPersistentCombo; + HbComboBox *mNameCombo; + HbCheckBox* mSaveDekCheckBox; + QString mColor; + bool mFailed; + +signals: + void tosqure(); + void totriangle(); + void tocircle(); + void save(); + void updateAct(); + void del(); + +protected slots: + void red(); + void green(); + void blue(); + +public slots: + void clearFailedFlag(); + void setFailedFlag(); + bool delBeforeSave(); +}; + +#endif /* FIGUREWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include "squrewidget.h" +#include "trianglewidget.h" +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow(&app); + mainWindow.show(); + + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/squrewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/squrewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +/* +* 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 "squrewidget.h" +#include +#include + + +squrewidget::squrewidget(QGraphicsItem *parent) + : figurewidget(parent) +{ + mGridLayout->addItem(mTriangle, 1, 0, 1, 1); + mGridLayout->addItem(mCircle, 1, 1, 1, 1); + + mColor = "red"; + mNameCombo->addItem("Squre"); + + delete mSqure; + mSqure = NULL; +} + +squrewidget::~squrewidget() +{ +} + +void squrewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QRect rect(10, 10, 300, 300); + painter->setPen(Qt::black); + if (mColor == "red") { + painter->setBrush(Qt::red); + } else if (mColor == "green") { + painter->setBrush(Qt::green); + } else if (mColor == "blue") { + painter->setBrush(Qt::blue); + } else { + Q_ASSERT(false); + } + painter->drawRect(rect); + + figurewidget::paint(painter, option, widget); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/squrewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/squrewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef SQUREWIDGET_H_ +#define SQUREWIDGET_H_ + +#include +#include +#include +#include +#include +#include "figurewidget.h" + +class squrewidget: public figurewidget +{ + Q_OBJECT +public: + squrewidget(QGraphicsItem *parent = 0); + ~squrewidget(); +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); +}; + +#endif /* SQUREWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/trianglewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/trianglewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,59 @@ +/* +* 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 "trianglewidget.h" +#include +#include +#include + + +trianglewidget::trianglewidget(QGraphicsItem *parent) + : figurewidget(parent) +{ + mGridLayout->addItem(mSqure, 1, 0, 1, 1); + mGridLayout->addItem(mCircle, 1, 1, 1, 1); + + mColor = "green"; + mNameCombo->addItem("Triangle"); + + delete mTriangle; + mTriangle = NULL; +} + +trianglewidget::~trianglewidget() +{ + +} + +void trianglewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QPolygon polygon; + polygon.putPoints(0, 3, 10,300, 150,10, 300,300); + painter->setPen(Qt::black); + if (mColor == "red") { + painter->setBrush(Qt::red); + } else if (mColor == "green") { + painter->setBrush(Qt::green); + } else if (mColor == "blue") { + painter->setBrush(Qt::blue); + } else { + Q_ASSERT(false); + } + + painter->drawPolygon(polygon, Qt::WindingFill); + + figurewidget::paint(painter, option, widget); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/trianglewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/trianglewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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: +* +*/ +#ifndef TRAINGLEWIDGET_H_ +#define TRAINGLEWIDGET_H_ + +#include +#include +#include +#include +#include +#include "figurewidget.h" + +class trianglewidget: public figurewidget +{ + Q_OBJECT +public: + trianglewidget(QGraphicsItem *parent = 0); + ~trianglewidget(); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); +}; + +#endif /* TRAINGLEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -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 "viewmanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "squrewidget.h" +#include "trianglewidget.h" +#include "circlewidget.h" +#include "figurewidget.h" +#include + +#include +#include +#include "afstorageglobals.h" + +QTM_USE_NAMESPACE + + +viewmanager::viewmanager(HbApplication *hbapp): + HbMainWindow(), mHbApp(hbapp) +{ + + mActivityStorage = new AfActivityStorage; + mActivation = new AfActivation; + + qRegisterMetaType("Af::ActivationReason"); + connect(mActivation, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivityData(Af::ActivationReason, QString, QVariantHash))); + + + + mSw = new squrewidget(); + mTw = new trianglewidget(); + mCw = new circlewidget(); + mSView = addView(mSw); + mSView->setTitle("Squre"); + mTView = addView(mTw); + mTView->setTitle("Triangle"); + mCView = addView(mCw); + mCView->setTitle("Circle"); + totriangle(); + connect(mSw, SIGNAL(totriangle()), this, SLOT(totriangle())); + connect(mSw, SIGNAL(tocircle()), this, SLOT(tocircle())); + + connect(mTw, SIGNAL(tocircle()), this, SLOT(tocircle())); + connect(mTw, SIGNAL(tosqure()), this, SLOT(tosqure())); + + connect(mCw, SIGNAL(tosqure()), this, SLOT(tosqure())); + connect(mCw, SIGNAL(totriangle()), this, SLOT(totriangle())); + + connect(mSw, SIGNAL(save()), this, SLOT(save())); + connect(mTw, SIGNAL(save()), this, SLOT(save())); + connect(mCw, SIGNAL(save()), this, SLOT(save())); + connect(mSw, SIGNAL(del()), this, SLOT(del())); + connect(mTw, SIGNAL(del()), this, SLOT(del())); + connect(mCw, SIGNAL(del()), this, SLOT(del())); + + //startup case + Af::ActivationReason reason = mActivation->reason(); + QString actName; + QVariantHash parameters; + if (reason == Af::ActivationReasonActivity) { + actName = mActivation->name(); + parameters = mActivation->parameters(); + QVariant data = mActivityStorage->activityData(actName); + loadActivityData(data, true); + } + //startup case end + +} + +viewmanager::~viewmanager() +{ + + delete mActivityStorage; + delete mActivation; +} + +void viewmanager::totriangle() +{ + setCurrentView(mTView); + mStatename = "triangle"; +} + +void viewmanager::tosqure() +{ + setCurrentView(mSView); + mStatename = "squre"; +} + +void viewmanager::tocircle() +{ + setCurrentView(mCView); + mStatename = "circle"; +} + + +void viewmanager::save() +{ + QString color; + figurewidget* widget = currentWidget(); + color = widget->color(); + + QStringList list; + list.append(mStatename); + list.append(color); + mSaveVariant.clear(); + mSaveVariant = list; + QString visible = widget->visibility(); + QString persistent = widget->persistent(); + QString name = widget->name(); + bool delBefore = widget->delBeforeSave(); + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert("screenshot", screenshot); + if ( visible == "true" ) + { + metadata.insert(ActivityVisibility, true); + } + else if ( visible == "false" ) + { + metadata.insert(ActivityVisibility, false); + } + + if ( persistent == "true" ) + { + metadata.insert(ActivityPersistence, true); + } + else if ( persistent == "false" ) + { + metadata.insert(ActivityPersistence, false); + } + + if ( name != "none" ) + { + metadata.insert(ActivityApplicationName, name); + } + + if (delBefore) { + bool ok = mActivityStorage->removeActivity(mStatename); + } + bool ok = mActivityStorage->saveActivity(mStatename, mSaveVariant, metadata); + if (!ok) { + widget->setFailedFlag(); + } + else { + widget->clearFailedFlag(); + } +} + + +void viewmanager::del() +{ + bool ok = mActivityStorage->removeActivity(mStatename); + figurewidget* widget = currentWidget(); + if (!ok) { + widget->setFailedFlag(); + } + else { + widget->clearFailedFlag(); + } +} + +void viewmanager::loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter) +{ + QVariant data = mActivityStorage->activityData( name ); + loadActivityData( data, false ); +} + +void viewmanager::loadActivityData(const QVariant &data, bool startup) +{ + HbView *oldView = currentView(); + QStringList list = data.toStringList(); + QString statename = list.at(0); + QString color = list.at(1); + if (statename == "squre") { + mSw->setcolor(color); + tosqure(); + mSw->update(); + } else if (statename == "triangle") { + mTw->setcolor(color); + totriangle(); + mTw->update(); + } else if (statename == "circle") { + mCw->setcolor(color); + tocircle(); + mCw->update(); + } else { + Q_ASSERT(false); + } + + if (currentView() != oldView && !startup) { + QEventLoop loop; + loop.connect(this, SIGNAL(viewReady()), SLOT(quit())); + loop.exec(); + } +} + +figurewidget* viewmanager::currentWidget() + { + HbView* view = currentView(); + QGraphicsWidget* gwidget = view->widget(); + figurewidget* lwidget = qobject_cast(gwidget); + } \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestfigure/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestfigure/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,71 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +class HbApplication; +class figurewidget; +class AfActivityStorage; +class AfActivation; + +#include +#include +#include + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(HbApplication *hbapp); + virtual ~viewmanager(); + figurewidget* currentWidget(); + +private: + figurewidget *mSw; + figurewidget *mTw; + figurewidget *mCw; + HbView *mSView; + HbView *mTView; + HbView *mCView; + +private slots: + void totriangle(); + void tosqure(); + void tocircle(); + + void save(); + void del(); + +public slots: + void loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter); + +public: + void loadActivityData(const QVariant &data, bool startup); + +private: + QString mStatename; + QVariant mSaveVariant; + HbApplication *mHbApp; + AfActivityStorage* mActivityStorage; + AfActivation* mActivation; + +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/acttestletter.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/acttestletter.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = acttestletter + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +boldwidget.cpp\ +italicwidget.cpp\ +viewmanager.cpp\ +underlinewidget.cpp\ +letterwidget.cpp + +HEADERS += boldwidget.h\ +italicwidget.h\ +viewmanager.h\ +underlinewidget.h\ +letterwidget.h\ + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB + TARGET.UID3 = 0xEba3ddd2 +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/boldwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/boldwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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 "boldwidget.h" +#include +#include + + +boldwidget::boldwidget(QGraphicsItem *parent) + : letterwidget(parent) +{ + mGridLayout->addItem(mItalic, 1, 0, 1, 1); + mGridLayout->addItem(mUnderline, 1, 1, 1, 1); + + mColor = "red"; + mNameCombo->addItem("Bold"); + + delete mBold; + mBold = NULL; +} + +boldwidget::~boldwidget() +{ + +} + +void boldwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + letterwidget::paint(painter, option, widget); + QFont font; + font.setPointSize(45); + font.setBold(true); + painter->setFont(font); + painter->drawText(10, 140, "Bold"); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/boldwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/boldwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ +#ifndef BOLDWIDGET_H_ +#define BOLDWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include "letterwidget.h" + +class boldwidget: public letterwidget +{ + Q_OBJECT +public: + boldwidget(QGraphicsItem *parent = 0); + ~boldwidget(); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +}; + +#endif /* BOLDWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/italicwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/italicwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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 "italicwidget.h" +#include +#include +#include + +const QString KButtonString("to bold"); + +italicwidget::italicwidget(QGraphicsItem *parent) + : letterwidget(parent) +{ + mGridLayout->addItem(mBold, 1, 0, 1, 1); + mGridLayout->addItem(mUnderline, 1, 1, 1, 1); + + mColor = "green"; + mNameCombo->addItem("Italic"); + + delete mItalic; + mItalic = NULL; +} + +italicwidget::~italicwidget() +{ + +} + +void italicwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + letterwidget::paint(painter, option, widget); + QFont font; + font.setPointSize(45); + font.setItalic(true); + painter->setFont(font); + painter->drawText(10, 140, "Italic"); +} + + + diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/italicwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/italicwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +/* +* 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: +* +*/ +#ifndef ITALICWIDGET_H_ +#define ITALICWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include "letterwidget.h" + +class italicwidget: public letterwidget +{ + Q_OBJECT +public: + italicwidget(QGraphicsItem *parent = 0); + ~italicwidget(); + + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +}; + +#endif /* ITALICWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/letterwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/letterwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,201 @@ +/* +* 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 "letterwidget.h" +#include +#include +#include +#include +#include +#include +#include +#include + +letterwidget::letterwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + HbWidget* widget = new HbWidget; + HbScrollArea* scrollArea = new HbScrollArea; + + mItalic = new HbPushButton("Italic"); + mBold = new HbPushButton("Bold"); + mUnderline = new HbPushButton("Underline"); + mRed = new HbPushButton("Red"); + mGreen = new HbPushButton("Green"); + mBlue = new HbPushButton("Blue"); + mSave = new HbPushButton("Save"); + mDelete = new HbPushButton("Delete"); + + mVisibilityLabel = new HbLabel("Visibility"); + mVisibilityCombo = new HbComboBox(); + mVisibilityCombo->addItem("none"); + mVisibilityCombo->addItem("true"); + mVisibilityCombo->addItem("false"); + + mPersistentLabel = new HbLabel("Persistence"); + mPersistentCombo = new HbComboBox(); + mPersistentCombo->addItem("none"); + mPersistentCombo->addItem("true"); + mPersistentCombo->addItem("false"); + + mNameLabel = new HbLabel("Name"); + mNameCombo = new HbComboBox(); + mNameCombo->addItem("none"); + + mStatusLabel = new HbLabel("Status"); + mResultLabel = new HbLabel; + + mSaveDekCheckBox = new HbCheckBox("Delete before Save"); + mSaveDekCheckBox->setCheckState(Qt::Checked); + + mBackgroundLabel = new HbLabel("Background"); + mBackgroundStatusLabel = new HbLabel(); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mStatusLabel, 0, 0, 1, 1); + mGridLayout->addItem(mResultLabel, 0, 1, 1, 2); + mGridLayout->addItem(mRed, 2, 0, 1, 1); + mGridLayout->addItem(mGreen, 2, 1, 1, 1); + mGridLayout->addItem(mBlue, 2, 2, 1, 1); + mGridLayout->addItem(mSave, 3, 0, 1, 1); + mGridLayout->addItem(mDelete, 3, 1, 1, 1); + mGridLayout->addItem(mVisibilityLabel, 4, 0, 1, 1); + mGridLayout->addItem(mVisibilityCombo, 4, 1, 1, 2); + mGridLayout->addItem(mPersistentLabel, 5, 0, 1, 1); + mGridLayout->addItem(mPersistentCombo, 5, 1, 1, 2); + mGridLayout->addItem(mNameLabel, 6, 0, 1, 1); + mGridLayout->addItem(mNameCombo, 6, 1, 1, 2); + mGridLayout->addItem(mSaveDekCheckBox, 7, 0, 1, 3); + mGridLayout->addItem(mBackgroundLabel, 8, 0, 1, 2); + mGridLayout->addItem(mBackgroundStatusLabel, 8, 2, 1, 1); + + widget->setLayout(mGridLayout); + + scrollArea->setContentWidget(widget); + scrollArea->setScrollDirections(Qt::Vertical); + scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); + + connect(mRed, SIGNAL(released()), this, SLOT(red())); + connect(mGreen, SIGNAL(released()), this, SLOT(green())); + connect(mBlue, SIGNAL(released()), this, SLOT(blue())); + + connect(mItalic, SIGNAL(released()), this, SIGNAL(toitalic())); + connect(mBold, SIGNAL(released()), this, SIGNAL(tobold())); + connect(mUnderline, SIGNAL(released()), this, SIGNAL(tounderline())); + + connect(mSave, SIGNAL(released()), this, SIGNAL(save())); + connect(mDelete, SIGNAL(released()), this, SIGNAL(del())); + + QGraphicsGridLayout* mainLayout = new QGraphicsGridLayout; + mainLayout->addItem(scrollArea, 1, 0, 1, 6); + mainLayout->setRowFixedHeight(0, 200); + setLayout(mainLayout); + + setStatus(true); + +} + +void letterwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + HbWidget::paint(painter, option, widget); + + if (mColor == "red") { + painter->setPen(Qt::red); + } else if (mColor == "green") { + painter->setPen(Qt::green); + } else if (mColor == "blue") { + painter->setPen(Qt::blue); + } else { + Q_ASSERT(false); + } +} + +letterwidget::~letterwidget() +{ +} + + +void letterwidget::red() +{ + mColor = "red"; + update(); +} + +void letterwidget::green() +{ + mColor = "green"; + update(); +} + +void letterwidget::blue() +{ + mColor = "blue"; + update(); +} + +void letterwidget::setcolor(const QString &color) +{ + mColor = color; +} + +QString letterwidget::color() +{ + return mColor; +} + +QString letterwidget::visibility() +{ + return mVisibilityCombo->currentText(); +} + +QString letterwidget::persistent() +{ + return mPersistentCombo->currentText(); +} + +QString letterwidget::name() +{ + return mNameCombo->currentText(); +} + +void letterwidget::setStatus(bool status) +{ + if(status) { + mResultLabel->setTextColor(Qt::green); + mResultLabel->setPlainText("Ok"); + } else { + mResultLabel->setTextColor(Qt::red); + mResultLabel->setPlainText("Fail"); + } + +} + +bool letterwidget::delBeforeSave() +{ + if (mSaveDekCheckBox->checkState() == Qt::Checked) { + return true; + } + return false; +} + +void letterwidget::setBackgroundFlag(bool background) +{ + QString mess = ""; + if (background) { + mess = "true"; + } + mBackgroundStatusLabel->setPlainText(mess); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/letterwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/letterwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,87 @@ +/* +* 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: +* +*/ +#ifndef LETTERWIDGET_H_ +#define LETTERWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include + +class letterwidget: public HbWidget +{ + Q_OBJECT +public: + letterwidget(QGraphicsItem *parent = 0); + ~letterwidget(); + void setcolor(const QString &color); + QString color(); + QString visibility(); + QString persistent(); + QString name(); + void setBackgroundFlag(bool background); + + +protected: + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +protected: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mItalic; + HbPushButton *mBold; + HbPushButton *mUnderline; + HbPushButton *mRed; + HbPushButton *mGreen; + HbPushButton *mBlue; + HbPushButton *mSave; + HbPushButton *mDelete; + HbLabel* mVisibilityLabel; + HbLabel* mPersistentLabel; + HbLabel* mNameLabel; + HbComboBox *mVisibilityCombo; + HbComboBox *mPersistentCombo; + HbComboBox *mNameCombo; + HbLabel* mStatusLabel; + HbLabel* mResultLabel; + HbCheckBox* mSaveDekCheckBox; + QString mColor; + HbLabel* mBackgroundLabel; + HbLabel* mBackgroundStatusLabel; + +signals: + void tobold(); + void toitalic(); + void tounderline(); + void save(); + void del(); + +protected slots: + void red(); + void green(); + void blue(); + +public: + void setStatus(bool status); + bool delBeforeSave(); + +}; + +#endif /* LETTERWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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 +#include +#include "boldwidget.h" +#include "italicwidget.h" +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow(&app); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/underlinewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/underlinewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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 "underlinewidget.h" +#include +#include +#include +#include + + +underlinewidget::underlinewidget(QGraphicsItem *parent) + : letterwidget(parent) +{ + mGridLayout->addItem(mItalic, 1, 0, 1, 1); + mGridLayout->addItem(mBold, 1, 1, 1, 1); + + mColor = "blue"; + mNameCombo->addItem("Underline"); + + delete mUnderline; + mUnderline = NULL; +} + +underlinewidget::~underlinewidget() +{ + +} + +void underlinewidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + letterwidget::paint(painter, option, widget); + QFont font; + font.setPointSize(40); + font.setUnderline(true); + painter->setFont(font); + painter->drawText(10, 120, "Under"); + painter->drawText(10, 240, "line"); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/underlinewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/underlinewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ +#ifndef UNDERLINEWIDGET_H_ +#define UNDERLINEWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include "letterwidget.h" + +class underlinewidget: public letterwidget +{ + Q_OBJECT +public: + underlinewidget(QGraphicsItem *parent = 0); + ~underlinewidget(); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +}; + +#endif /* UNDERLINEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,268 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include "viewmanager.h" +#include "boldwidget.h" +#include "italicwidget.h" +#include "underlinewidget.h" +#include "letterwidget.h" +#include "afstorageglobals.h" + +QTM_USE_NAMESPACE + +viewmanager::viewmanager(HbApplication *hbapp): + HbMainWindow(), mHbApp(hbapp) +{ + QServiceManager serviceManager; + mActivityStorage = serviceManager.loadInterface("com.nokia.qt.activities.Storage"); + if (!mActivityStorage) { + qFatal("load Storage plugin failed"); + } + + mActivaction = serviceManager.loadInterface("com.nokia.qt.activities.Activation"); + if (!mActivaction) { + qFatal("load Activation plugin failed"); + } + + qRegisterMetaType("Af::ActivationReason"); + connect(mActivaction, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivityData(Af::ActivationReason, QString, QVariantHash))); + + + mBoldWidget = new boldwidget(); + mItalicWidget = new italicwidget(); + mUnderlineWidget = new underlinewidget(); + mBoldView = addView(mBoldWidget); + mBoldView->setTitle("Bold"); + mItalicView = addView(mItalicWidget); + mItalicView->setTitle("Italic"); + mUnderlineView = addView(mUnderlineWidget); + mUnderlineView->setTitle("Underline"); + toitalic(); + connect(mBoldWidget, SIGNAL(toitalic()), this, SLOT(toitalic())); + connect(mBoldWidget, SIGNAL(tounderline()), this, SLOT(tounderline())); + + connect(mItalicWidget, SIGNAL(tounderline()), this, SLOT(tounderline())); + connect(mItalicWidget, SIGNAL(tobold()), this, SLOT(tobold())); + + connect(mUnderlineWidget, SIGNAL(tobold()), this, SLOT(tobold())); + connect(mUnderlineWidget, SIGNAL(toitalic()), this, SLOT(toitalic())); + + connect(mBoldWidget, SIGNAL(save()), this, SLOT(save())); + connect(mItalicWidget, SIGNAL(save()), this, SLOT(save())); + connect(mUnderlineWidget, SIGNAL(save()), this, SLOT(save())); + connect(mBoldWidget, SIGNAL(del()), this, SLOT(del())); + connect(mItalicWidget, SIGNAL(del()), this, SLOT(del())); + connect(mUnderlineWidget, SIGNAL(del()), this, SLOT(del())); + + connect(this, SIGNAL(statusChanged(bool)), this, SLOT(newStatus(bool))); + + //startup case + Af::ActivationReason reason; + bool ok = QMetaObject::invokeMethod(mActivaction, "reason", Q_RETURN_ARG(Af::ActivationReason, reason)); + if (!ok) { + emit statusChanged(false); + } + QString actName; + QVariantHash parameters; + if (reason == Af::ActivationReasonActivity) { + ok = QMetaObject::invokeMethod(mActivaction, "name", Q_RETURN_ARG(QString, actName)); + if (!ok) { + emit statusChanged(false); + } + ok = QMetaObject::invokeMethod(mActivaction, "parameters", Q_RETURN_ARG(QVariantHash, parameters)); + if (!ok) { + emit statusChanged(false); + } + + QVariant data; + ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actName)); + if (!ok) { + emit statusChanged(false); + } + + bool background = false; + if (parameters.contains(Af::KActivityUriBackgroundKey)) { + background = true; + } + loadActivityData(data, background, true); + } + //startup case end +} + +viewmanager::~viewmanager() +{ +} + +void viewmanager::toitalic() +{ + setCurrentView(mItalicView); + mStatename = "italic"; +} + +void viewmanager::tobold() +{ + setCurrentView(mBoldView); + mStatename = "bold"; +} + +void viewmanager::tounderline() +{ + setCurrentView(mUnderlineView); + mStatename = "underline"; +} + + +void viewmanager::save() +{ + QString color; + QString visible; + QString persistent; + QString name; + bool delBefore; + letterwidget* widget = currentWidget(); + color = widget->color(); + visible = widget->visibility(); + persistent = widget->persistent(); + name = widget->name(); + delBefore = widget->delBeforeSave(); + + QStringList list; + list.append(mStatename); + list.append(color); + mSaveVariant.clear(); + mSaveVariant = list; + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + if ( visible == "true" ) + { + metadata.insert(ActivityVisibility, true); + } + else if ( visible == "false" ) + { + metadata.insert(ActivityVisibility, false); + } + + if ( persistent == "true" ) + { + metadata.insert(ActivityPersistence, true); + } + else if ( persistent == "false" ) + { + metadata.insert(ActivityPersistence, false); + } + + if ( name != "none" ) + { + metadata.insert(ActivityApplicationName, name); + } + + bool retok, ok; + if (delBefore) { + ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename)); + if (!ok) { + emit statusChanged(false); + return; + } + } + + ok = QMetaObject::invokeMethod(mActivityStorage, "saveActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename), Q_ARG(QVariant, mSaveVariant), Q_ARG(QVariantHash, metadata)); + if (!ok || !retok) { + emit statusChanged(false); + return; + } + emit statusChanged(true); +} +void viewmanager::del() +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename)); + if (!ok || !retok) { + emit statusChanged(false); + } + emit statusChanged(true); +} + +void viewmanager::loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter) +{ + QVariant data; + bool ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + emit statusChanged(false); + return; + } + bool background = false; + if (parameter.contains(Af::KActivityUriBackgroundKey)) { + background = true; + } + loadActivityData(data, background, false); +} + +void viewmanager::loadActivityData(const QVariant &data, bool background, bool startup) +{ + HbView *oldView = currentView(); + + QStringList list = data.toStringList(); + QString statename = list.at(0); + QString color = list.at(1); + if (statename == "bold") { + mBoldWidget->setcolor(color); + mBoldWidget->setBackgroundFlag(background); + tobold(); + mBoldWidget->update(); + } else if (statename == "italic") { + mItalicWidget->setcolor(color); + mItalicWidget->setBackgroundFlag(background); + toitalic(); + mItalicWidget->update(); + } else if (statename == "underline") { + mUnderlineWidget->setcolor(color); + mUnderlineWidget->setBackgroundFlag(background); + tounderline(); + mUnderlineWidget->update(); + } else { + statusChanged(false); + } + + if (currentView() != oldView && !startup) { + QEventLoop loop; + loop.connect(this, SIGNAL(viewReady()), SLOT(quit())); + loop.exec(); + } +} + +letterwidget* viewmanager::currentWidget() +{ + HbView* view = currentView(); + QGraphicsWidget* gwidget = view->widget(); + letterwidget* lwidget = qobject_cast(gwidget); +} + +void viewmanager::newStatus(bool status) +{ + letterwidget* cw = currentWidget(); + if(cw) { + cw->setStatus(status); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttestletter/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttestletter/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,71 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +#include + +class HbApplication; +class letterwidget; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(HbApplication *hbapp); + virtual ~viewmanager(); + void initialize(); + +private: + letterwidget *mBoldWidget; + letterwidget *mItalicWidget; + letterwidget *mUnderlineWidget; + HbView *mBoldView; + HbView *mItalicView; + HbView *mUnderlineView; + +private slots: + void toitalic(); + void tobold(); + void tounderline(); + + void save(); + void del(); + void newStatus(bool status); + +public slots: + void loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter); + +signals: + void statusChanged(bool status); + +public: + void loadActivityData(const QVariant &data, bool background, bool startup); + letterwidget* currentWidget(); + +private: + QObject *mActivityStorage; + QObject *mActivaction; + QString mStatename; + QVariant mSaveVariant; + HbApplication *mHbApp; +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttesttakeawhile/acttesttakeawhile.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttesttakeawhile/acttesttakeawhile.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = acttesttakeawhile + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp \ +viewmanager.cpp \ +letterwidget.cpp + +HEADERS += viewmanager.h \ +letterwidget.h + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttesttakeawhile/letterwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttesttakeawhile/letterwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,126 @@ +/* +* 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 "letterwidget.h" +#include +#include + + +letterwidget::letterwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + mA = new HbPushButton("A"); + mB = new HbPushButton("B"); + mC = new HbPushButton("C"); + + mSave = new HbPushButton("Save"); + mDel = new HbPushButton("Delete"); + mWait = new HbPushButton("Wait 10 s"); + mPanic = new HbPushButton("Panic client process"); + + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mA, 3, 0, 1, 1); + mGridLayout->addItem(mB, 3, 1, 1, 1); + mGridLayout->addItem(mC, 3, 2, 1, 1); + mGridLayout->addItem(mSave, 4, 0, 1, 1); + mGridLayout->addItem(mDel, 4, 1, 1, 1); + mGridLayout->addItem(mWait, 4, 2, 1, 1); + mGridLayout->addItem(mPanic, 5, 0, 1, 3); + mGridLayout->setRowStretchFactor(0, 1); + mGridLayout->setRowStretchFactor(1, 1); + mGridLayout->setRowStretchFactor(2, 1); + setLayout(mGridLayout); + + connect(mA, SIGNAL(released()), this, SLOT(toA())); + connect(mB, SIGNAL(released()), this, SLOT(toB())); + connect(mC, SIGNAL(released()), this, SLOT(toC())); + connect(mWait, SIGNAL(released()), this, SLOT(wait())); + connect(mPanic, SIGNAL(released()), this, SLOT(panic())); + + connect(mSave, SIGNAL(released()), this, SIGNAL(save())); + connect(mDel, SIGNAL(released()), this, SIGNAL(del())); + + toA(); + +} + +letterwidget::~letterwidget() +{ + // TODO Auto-generated destructor stub +} + +void letterwidget::toA() +{ + mStatename = "A"; + update(); +} + +void letterwidget::toB() +{ + mStatename = "B"; + update(); +} + +void letterwidget::toC() +{ + mStatename = "C"; + update(); +} + +void letterwidget::wait() + { + User::After(10000000); //10 s + } + +void letterwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + HbWidget::paint(painter, option, widget); + + if ( mStatename.isNull() ) { + return; + } + else if ( mStatename == "A" ) { + painter->setPen(Qt::red); + } + else if ( mStatename == "B" ) { + painter->setPen(Qt::green); + } + else { + painter->setPen(Qt::blue); + } + + QFont font; + font.setPointSize(60); + painter->setFont(font); + painter->drawText(10, 140, mStatename); +} + +QString letterwidget::state() +{ + return mStatename; +} + +void letterwidget::setState( QString state ) +{ + mStatename = state; + update(); +} + +void letterwidget::panic() +{ + User::Panic(_L("forced panic"), 122); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttesttakeawhile/letterwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttesttakeawhile/letterwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +/* +* 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: +* +*/ +#ifndef LETTERWIDGET_H_ +#define LETTERWIDGET_H_ + +#include +#include +#include +#include +#include +#include + +class letterwidget: public HbWidget +{ + Q_OBJECT +public: + letterwidget(QGraphicsItem *parent = 0); + ~letterwidget(); + QString state(); + void setState( QString state ); + +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + + QGraphicsGridLayout *mGridLayout; + + HbPushButton *mA; + HbPushButton *mB; + HbPushButton *mC; + + HbPushButton *mSave; + HbPushButton *mDel; + HbPushButton *mWait; + HbPushButton *mPanic; + +signals: + void save(); + void del(); + +private slots: + void toA(); + void toB(); + void toC(); + void wait(); + void panic(); + +private: + QString mStatename; + +}; + +#endif /* LETTERWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttesttakeawhile/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttesttakeawhile/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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 +#include +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow; + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttesttakeawhile/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttesttakeawhile/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,127 @@ +/* +* 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 +#include +#include +#include +#include +#include "viewmanager.h" +#include "letterwidget.h" +#include +#include +#include "afstorageglobals.h" + +QTM_USE_NAMESPACE + +viewmanager::viewmanager(): + HbMainWindow() +{ + mLw = new letterwidget; + addView(mLw); + + QServiceManager serviceManager; + mActivityStorage = serviceManager.loadInterface("com.nokia.qt.activities.Storage"); + if (!mActivityStorage) { + qFatal("load Storage plugin failed"); + } + + mActivaction = serviceManager.loadInterface("com.nokia.qt.activities.Activation"); + if (!mActivaction) { + qFatal("load Activation plugin failed"); + } + + qRegisterMetaType("Af::ActivationReason"); + connect(mActivaction, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivityData(Af::ActivationReason, QString, QVariantHash))); + + + //startup case + Af::ActivationReason reason; + bool ok = QMetaObject::invokeMethod(mActivaction, "reason", Q_RETURN_ARG(Af::ActivationReason, reason)); + if (!ok) { + qFatal("Get reason failed"); + } + QString actName; + QVariantHash parameters; + if (reason == Af::ActivationReasonActivity) { + ok = QMetaObject::invokeMethod(mActivaction, "name", Q_RETURN_ARG(QString, actName)); + if (!ok) { + qFatal("Get name failed"); + } + ok = QMetaObject::invokeMethod(mActivaction, "parameters", Q_RETURN_ARG(QVariantHash, parameters)); + if (!ok) { + qFatal("Get parameter failed"); + } + + QVariant data; + ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actName)); + if (!ok) { + qFatal("Get data failed"); + } + loadActivityData(data); + } + //startup case end + + connect(mLw, SIGNAL(save()), this, SLOT(save())); + connect(mLw, SIGNAL(del()), this, SLOT(del())); +} + +viewmanager::~viewmanager() +{ + delete mActivityStorage; + delete mActivaction; +} + +void viewmanager::save() +{ + mSaveVariant = mLw->state(); + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + QVariantHash metadata; + metadata.insert(ActivityScreenshotKeyword, screenshot); + + bool ok, retok; + ok = QMetaObject::invokeMethod(mActivityStorage, "saveActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state()), Q_ARG(QVariant, mSaveVariant), Q_ARG(QVariantHash, metadata)); + + if (!ok || !retok) { + qFatal("Save failed"); + } +} +void viewmanager::del() +{ + bool retok; + bool ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state())); + if (!ok) { + qFatal("Remove failed"); + } +} + +void viewmanager::loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter) +{ + QVariant data; + bool ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + if (!ok) { + qFatal("Get data failed"); + } + loadActivityData(data); +} + +void viewmanager::loadActivityData(const QVariant &data) +{ + QString statename = data.toString(); + mLw->setState(statename); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/acttesttakeawhile/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/acttesttakeawhile/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,61 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +#include + +class HbApplication; +class QGraphicsGridLayout; +class HbPushButton; +class letterwidget; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(); + virtual ~viewmanager(); + void initialize(); + + + +private slots: + + void save(); + void del(); + +public slots: + void loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter); + +public: + void loadActivityData(const QVariant &data); + +private: + + + QObject *mActivityStorage; + QObject *mActivaction; + + QVariant mSaveVariant; + letterwidget *mLw; +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/newtestappset.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/newtestappset.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += acttestletter +SUBDIRS += acttestfigure +SUBDIRS += acttestbenchmark +SUBDIRS += acttestanimal +SUBDIRS += acttestdebugger +SUBDIRS += acttesttakeawhile +SUBDIRS += actautobenchmark \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/newtestappset/sis/activitytests.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/newtestappset/sis/activitytests.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +; acttestletter_template.pkg generated by qmake at 2010-07-06T11:50:44 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + + +; SIS header: name, uid, version +#{"activitytests"},(0xEba3ddd2),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + + +; Manual PKG pre-rules from PRO files +; Default dependency to Qt libraries + +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +; Default dependency to QtMobility libraries +(0x2002AC89), 1, 0, 1, {"QtMobility"} + +; Executable and default resource files +"/epoc32/release/armv5/urel/acttestletter.exe" - "!:\sys\bin\acttestletter.exe" +"/epoc32/data/z/resource/apps/acttestletter.rsc" - "!:\resource\apps\acttestletter.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/acttestletter_reg.rsc" - "!:\private\10003a3f\import\apps\acttestletter_reg.rsc" + +"/epoc32/release/armv5/urel/acttestfigure.exe" - "!:\sys\bin\acttestfigure.exe" +"/epoc32/data/z/resource/apps/acttestfigure.rsc" - "!:\resource\apps\acttestfigure.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/acttestfigure_reg.rsc" - "!:\private\10003a3f\import\apps\acttestfigure_reg.rsc" + +"/epoc32/release/armv5/urel/acttestbenchmark.exe" - "!:\sys\bin\acttestbenchmark.exe" +"/epoc32/data/z/resource/apps/acttestbenchmark.rsc" - "!:\resource\apps\acttestbenchmark.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/acttestbenchmark_reg.rsc" - "!:\private\10003a3f\import\apps\acttestbenchmark_reg.rsc" + +"/epoc32/release/armv5/urel/acttestanimal.exe" - "!:\sys\bin\acttestanimal.exe" +"/epoc32/data/z/resource/apps/acttestanimal.rsc" - "!:\resource\apps\acttestanimal.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/acttestanimal_reg.rsc" - "!:\private\10003a3f\import\apps\acttestanimal_reg.rsc" + +"/epoc32/release/armv5/urel/acttestdebugger.exe" - "!:\sys\bin\acttestdebugger.exe" +"/epoc32/data/z/resource/apps/acttestdebugger.rsc" - "!:\resource\apps\acttestdebugger.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/acttestdebugger_reg.rsc" - "!:\private\10003a3f\import\apps\acttestdebugger_reg.rsc" + +"/epoc32/release/armv5/urel/acttesttakeawhile.exe" - "!:\sys\bin\acttesttakeawhile.exe" +"/epoc32/data/z/resource/apps/acttesttakeawhile.rsc" - "!:\resource\apps\acttesttakeawhile.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/acttesttakeawhile_reg.rsc" - "!:\private\10003a3f\import\apps\acttesttakeawhile_reg.rsc" + +"/epoc32/release/armv5/urel/actautobenchmark.exe" - "!:\sys\bin\actautobenchmark.exe" +"/epoc32/data/z/resource/apps/actautobenchmark.rsc" - "!:\resource\apps\actautobenchmark.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/actautobenchmark_reg.rsc" - "!:\private\10003a3f\import\apps\actautobenchmark_reg.rsc" + +; Manual PKG post-rules from PRO files diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lowmemoryapp/basewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lowmemoryapp/basewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,435 @@ +/* +* 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 "basewidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const int KDataDataSize = 2*1024*1024; // 2 MB +const int KThumbDataSize = 10; // 10 B +const int KMaxHeapMem = 16*1024*1024; // 16 MB + + +basewidget::basewidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent) + : HbWidget(parent), mActivityStorage(activityStorage), mActivityManager(activityManager), mStream(stream), + mPixmap(NULL),mByteArray(NULL), + mSaveVariant(NULL), mSaveMetadata(NULL), + mAlloc(0) +{ + + + mSaveButton = new HbPushButton("Save"); + mThumbButton = new HbPushButton("Thumb"); + mDataButton = new HbPushButton("Data"); + + + mKBytesEdid = new HbLineEdit("1024"); + mKBytesEdid->setObjectName("KBytesEditLine"); + mQKBytesValidator = new QIntValidator(this); + mQKBytesValidator->setRange(40, KMaxHeapMem); + mKBytesValidator = new HbValidator(this); + mKBytesValidator->addField(mQKBytesValidator, "3000"); + mKBytesEdid->setValidator(mKBytesValidator); + + + mStatusValueLabel = new HbLabel("None status, none message"); + mBytesEditLabel = new HbLabel("Free KBytes[KB]"); + mCatchLabel = new HbLabel("Catches"); + + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mStatusValueLabel, 0, 0, 1, 6); + mGridLayout->addItem(mCatchLabel, 1, 0, 1, 6); + mGridLayout->addItem(mBytesEditLabel, 2, 0, 1, 2); + mGridLayout->addItem(mKBytesEdid, 2, 2, 1, 4); + mGridLayout->addItem(mSaveButton, 3, 0, 1, 2); + mGridLayout->addItem(mDataButton, 3, 2, 1, 2); + mGridLayout->addItem(mThumbButton, 3, 4, 1, 2); + setLayout(mGridLayout); + + + connect(mSaveButton, SIGNAL(released()), this, SLOT(save())); + connect(mThumbButton, SIGNAL(released()), this, SLOT(thumb())); + connect(mDataButton, SIGNAL(released()), this, SLOT(data())); +} + +basewidget::~basewidget() +{ + delete mQKBytesValidator; + delete mKBytesValidator; +} + + + + +int basewidget::Bytes() const +{ + int kb = Edit2Int(mKBytesEdid); + return kb*1024; +} + +int basewidget::Edit2Int(const HbLineEdit* lineedit) const +{ + int retvalue = 0; + bool ok = false; + QString edittext = lineedit->text(); + retvalue = edittext.toInt(&ok); + if(ok) { + return retvalue; + } + return 0; +} + +void basewidget::prepareDataSave() +{ + clearSaveData(); + int bytes = KDataDataSize; + mByteArray = new QByteArray(bytes, 'a'); + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + mPixmap = new QPixmap(QPixmap::grabWidget(mainWindow, mainWindow->rect())); + + mSaveVariant = new QVariant; + *mSaveVariant = *mByteArray; + delete mByteArray; + mByteArray = NULL; + + + mSaveMetadata = new QVariantHash; + mSaveMetadata->insert(ActivityScreenshotKeyword, *mPixmap); + delete mPixmap; + mPixmap = NULL; +} + +void basewidget::prepareThumbSave() +{ + clearSaveData(); + int bytes = KThumbDataSize; + mByteArray = new QByteArray(bytes, 'a'); + + QImage img = QImage(1000, 1000, QImage::Format_ARGB32); + img.fill(1); + for( int i=0; isave("c:\\ala.bmp"); + + mSaveVariant = new QVariant; + *mSaveVariant = *mByteArray; + delete mByteArray; + mByteArray = NULL; + + + mSaveMetadata = new QVariantHash; + mSaveMetadata->insert(ActivityScreenshotKeyword, *mPixmap); + delete mPixmap; + mPixmap = NULL; +} + +void basewidget::clearSaveData() +{ + delete mByteArray; + mByteArray = NULL; + delete mPixmap; + mPixmap = NULL; + delete mSaveVariant; + mSaveVariant = NULL; + delete mSaveMetadata; + mSaveMetadata = NULL; +} + +bool basewidget::saveActivity(int name) +{ + QString display; + display.setNum(name); + mSaveMetadata->insert(ActivityApplicationName, display); + bool retok, ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "saveActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, display), Q_ARG(QVariant, *mSaveVariant), Q_ARG(QVariantHash, *mSaveMetadata)); + } + catch(...) { + logCatchError("save"); + return false; + } + + return ok && retok; +} + +bool basewidget::removeActivity(const QString& name) +{ + bool retok, ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name)); + } + catch(...) { + logCatchError("remove"); + return false; + } + return ok && retok; +} + +bool basewidget::activities() +{ + bool ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "allActivities", Q_RETURN_ARG(QStringList, mActivities)); + } + catch(...) { + logCatchError("activities"); + return false; + } + return ok; +} + +bool basewidget::privateData(const QString& name) +{ + QVariant data; + bool ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + } + catch(...) { + logCatchError("data"); + return false; + } + const char* type = data.typeName(); + QString dtype(type); + logDataType(dtype); + return ok; +} + +bool basewidget::getThumbnail(const QString& name) +{ + QVariantHash metadata; + bool ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "activityMetaData", Q_RETURN_ARG(QVariantHash, metadata), Q_ARG(QString, name)); + } + catch(...) { + logCatchError("thumbnail"); + return false; + } + if(!ok) { + return false; + } + QString pixfile = metadata.value(ActivityScreenshotKeyword).toString(); + ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, QSize(1000, 1000)), Q_ARG(QString, pixfile), Q_ARG(void*, NULL)); + return ok; +} + + + +int basewidget::ClientHeapSize() +{ + RHeap& heap = User::Heap(); + TInt all=0; + heap.AllocSize(all); + return all; +} + + + + +void basewidget::logErrorMessage(const QString& mess) +{ + QString messlog("*Fail: "); + messlog += mess; + messlog += "*\n"; + *mStream<flush(); + mStatusValueLabel->setPlainText("Fail"); +} + + + +void basewidget::releaseMem() +{ + mActivities.clear(); + clearSaveData(); + releaseAlloced(); +} + + +void basewidget::save() +{ + releaseMem(); + bool ok = removeActivity("0"); + logAction("save"); + prepareDataSave(); + alloc(); + ok = saveActivity(0); + releaseMem(); + logSaveResult(ok); +} + +void basewidget::thumb() +{ + releaseMem(); + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + bool ok = removeActivity("0"); + logAction("thumb"); + prepareThumbSave(); + ok = saveActivity(0); + if(!ok) { + logErrorMessage("save"); + return; + } + clearSaveData(); + ok = activities(); + if(!ok || mActivities.count()==0) { + logErrorMessage("activities"); + return; + } + QString name = mActivities.at(0); + alloc(); + ok = getThumbnail(name); + if(!ok) { + logErrorMessage("getthumb"); + return; + } + connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + +} + +void basewidget::data() +{ + releaseMem(); + bool ok = removeActivity("0"); + logAction("data"); + prepareDataSave(); + ok = saveActivity(0); + if(!ok) { + logErrorMessage("save"); + return; + } + ok = activities(); + if(!ok || mActivities.count()==0) { + logErrorMessage("activities"); + return; + } + QString name = mActivities.at(0); + alloc(); + ok = privateData(name); + if(!ok) { + logErrorMessage("data"); + return; + } + releaseMem(); +} + +void basewidget::thumbnailReady(QPixmap pixmap, void* ptr) +{ + releaseMem(); + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + logPixmapSize(pixmap); +} + +void basewidget::logCatchError(const QString& mess) +{ + QString msg = tr("Catch err: %1").arg(mess); + mCatchLabel->setPlainText(msg); + *mStream<flush(); +} + +void basewidget::logDataType(const QString& type) +{ + QString msg = tr("Data type: %1").arg(type); + mStatusValueLabel->setPlainText(msg); + *mStream<flush(); +} + +void basewidget::logPixmapSize(const QPixmap& pix) +{ + QSize s = pix.size(); + QString msg = tr("Pix size: %1x%2").arg(s.width()).arg(s.height()); + mStatusValueLabel->setPlainText(msg); + *mStream<flush(); +} + +void basewidget::logAction(const QString& mess) +{ + mStatusValueLabel->clear(); + mCatchLabel->clear(); + QString msg = tr("Action: %1").arg(mess); + *mStream<flush(); +} + +void basewidget::logSaveResult(bool res) +{ + QString msg = tr("Save: %1").arg(res); + mStatusValueLabel->setPlainText(msg); + *mStream<flush(); +} + +bool basewidget::alloc() +{ + releaseAlloced(); + int tobefreebytes = Bytes(); + int all = ClientHeapSize(); + + int nowfree = KMaxHeapMem - all; + int toalloc = nowfree - tobefreebytes; + + bool ok = false; + if( toalloc>=0 ) { + ok = true; + try { + mAlloc = new char[toalloc]; + } + catch(...) { + ok = false; + } + } + if(!mAlloc) { + ok = false; + } + + if(!ok) { + QString msg = tr("Alloc Failed"); + mCatchLabel->setPlainText(msg); + *mStream<flush(); + } + return ok; +} + +void basewidget::releaseAlloced() +{ + delete mAlloc; + mAlloc = NULL; +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lowmemoryapp/basewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lowmemoryapp/basewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,119 @@ +/* +* 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: +* +*/ +#ifndef BASEWIDGET_H_ +#define BASEWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class basewidget: public HbWidget +{ + Q_OBJECT +public: + basewidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent = 0); + ~basewidget(); + + +protected: + + +protected: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mSaveButton; + HbPushButton *mThumbButton; + HbPushButton *mDataButton; + HbLabel* mStatusValueLabel; + HbLineEdit* mKBytesEdid; + HbLabel* mCatchLabel; + + HbLabel* mBytesEditLabel; + + + + QIntValidator* mQKBytesValidator; + HbValidator* mKBytesValidator; + + QObject* mActivityStorage; + QObject* mActivityManager; + QPixmap* mPixmap; + QByteArray* mByteArray; + + + QTextStream* mStream; + + QVariant* mSaveVariant; + QVariantHash* mSaveMetadata; + QStringList mActivities; + char* mAlloc; + QString mAction; + + + +protected slots: + void save(); + void data(); + void thumb(); + void thumbnailReady(QPixmap pixmap, void* ptr); + +public: + +protected: + int Bytes() const; + + int Edit2Int(const HbLineEdit* lineedit) const; + void prepareDataSave(); + void prepareThumbSave(); + void clearSaveData(); + bool saveActivity(int name); + bool removeActivity(const QString& name); + bool privateData(const QString& name); + bool getThumbnail(const QString& name); + bool activities(); + + int ClientHeapSize(); + + void logErrorMessage(const QString& mess); + + void releaseMem(); + + void logCatchError(const QString& mess); + void logDataType(const QString& type); + void logPixmapSize(const QPixmap& pix); + void logAction(const QString& mess); + void logSaveResult(bool res); + bool alloc(); + void releaseAlloced(); + + + +}; + +#endif /* BASEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lowmemoryapp/lowmemoryapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lowmemoryapp/lowmemoryapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = lowmemoryapp + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +basewidget.cpp\ +viewmanager.cpp + +HEADERS += viewmanager.h\ +basewidget.h + +LIBS += -lefsrv + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lowmemoryapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lowmemoryapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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 +#include +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow; + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lowmemoryapp/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lowmemoryapp/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,62 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include "viewmanager.h" +#include "basewidget.h" + +#include "afstorageglobals.h" +#include +#include + +QTM_USE_NAMESPACE + +viewmanager::viewmanager(): + HbMainWindow() +{ + QServiceManager serviceManager; + mActivityStorage = serviceManager.loadInterface("com.nokia.qt.activities.Storage"); + if (!mActivityStorage) { + qFatal("load Storage plugin failed"); + } + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("load Manger plugin failed"); + } + + mFile = new QFile("c:\\data\\nftlowmemory.txt"); + mFile->open(QIODevice::Append | QIODevice::Text); + mStream = new QTextStream(mFile); + mBaseWidget = new basewidget(mActivityStorage, mActivityManager, mStream); + mBaseView = addView(mBaseWidget); + mBaseView->setTitle("Low memory"); + setCurrentView(mBaseView); + +} + +viewmanager::~viewmanager() +{ + delete mActivityStorage; + delete mActivityManager; + delete mFile; + delete mStream; +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lowmemoryapp/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lowmemoryapp/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,59 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +#include + +class basewidget; +class QFile; +class QTextStream; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(); + virtual ~viewmanager(); + +private: + basewidget* mBaseWidget; + HbView* mBaseView; + + QFile* mFile; + QTextStream* mStream; + +private slots: + +public slots: + + +signals: + + +public: + + +private: + QObject* mActivityStorage; + QObject* mActivityManager; +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/basewidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/basewidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,503 @@ +/* +* 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 "basewidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + + +basewidget::basewidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent) + : HbWidget(parent), mActivityStorage(activityStorage), mActivityManager(activityManager), mStream(stream), + mPixmap(NULL),mByteArray(NULL), + mItemsCounter(0), mTimesCounter(0), + mSaveVariant(NULL), mSaveMetadata(NULL), + mAction("none") +{ + + + mStartTestButton = new HbPushButton("Start"); + mChangeTestButton = new HbPushButton("Change Test"); + mBreakButton = new HbPushButton("Break"); + + mTestCheckBox = new HbCheckBox("Delete after Save"); + mTestCheckBox->setCheckState(Qt::Checked); + + mItemsEdid = new HbLineEdit("100"); + mItemsEdid->setObjectName("ItemsEditLine"); + mQItemsValidator = new QIntValidator(this); + mQItemsValidator->setRange(0, 1000000); + mItemsValidator = new HbValidator(this); + mItemsValidator->addField(mQItemsValidator, "100"); + mItemsEdid->setValidator(mItemsValidator); + + mTimesEdid = new HbLineEdit("100"); + mTimesEdid->setObjectName("TimesEditLine"); + mQTimesValidator = new QIntValidator(this); + mQTimesValidator->setRange(0, 1000000); + mTimesValidator = new HbValidator(this); + mTimesValidator->addField(mQTimesValidator, "100"); + mTimesEdid->setValidator(mTimesValidator); + + mKBytesEdid = new HbLineEdit("10"); + mKBytesEdid->setObjectName("KBytesEditLine"); + mQKBytesValidator = new QIntValidator(this); + mQKBytesValidator->setRange(0, 1000000); + mKBytesValidator = new HbValidator(this); + mKBytesValidator->addField(mQKBytesValidator, "10"); + mKBytesEdid->setValidator(mKBytesValidator); + + mClientMemBeforeLabel = new HbLabel("ClMemBef"); + mClientMemAfterLabel = new HbLabel("ClMemAft"); + mClientMemDiffLabel = new HbLabel("ClMemDiff"); + mDbMemBeforeLabel = new HbLabel("DbMemBef"); + mDbMemAfterLabel = new HbLabel("DbMemAft"); + mDbMemDiffLabel = new HbLabel("DbMemDiff"); + mActionLabel = new HbLabel("action"); + mIterLabel = new HbLabel("iter"); + mTimesLabel = new HbLabel("times"); + mStatusLabel = new HbLabel("Status"); + mStatusValueLabel = new HbLabel("None"); + mTimesEditLabel = new HbLabel("Times"); + mBytesEditLabel = new HbLabel("KBytes[KB]"); + mItemsEditLabel = new HbLabel("Items"); + + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mClientMemBeforeLabel, 0, 0, 1, 2); + mGridLayout->addItem(mClientMemAfterLabel, 0, 2, 1, 2); + mGridLayout->addItem(mClientMemDiffLabel, 0, 4, 1, 2); + mGridLayout->addItem(mDbMemBeforeLabel, 1, 0, 1, 2); + mGridLayout->addItem(mDbMemAfterLabel, 1, 2, 1, 2); + mGridLayout->addItem(mDbMemDiffLabel, 1, 4, 1, 2); + mGridLayout->addItem(mActionLabel, 2, 0, 1, 2); + mGridLayout->addItem(mIterLabel, 2, 2, 1, 2); + mGridLayout->addItem(mTimesLabel, 2, 4, 1, 2); + mGridLayout->addItem(mStatusLabel, 3, 0, 1, 2); + mGridLayout->addItem(mStatusValueLabel, 3, 2, 1, 4); + mGridLayout->addItem(mTimesEditLabel, 4, 0, 1, 2); + mGridLayout->addItem(mTimesEdid, 4, 2, 1, 4); + mGridLayout->addItem(mItemsEditLabel, 5, 0, 1, 2); + mGridLayout->addItem(mItemsEdid, 5, 2, 1, 4); + mGridLayout->addItem(mBytesEditLabel, 6, 0, 1, 2); + mGridLayout->addItem(mKBytesEdid, 6, 2, 1, 4); + mGridLayout->addItem(mBytesEditLabel, 7, 0, 1, 2); + mGridLayout->addItem(mKBytesEdid, 7, 2, 1, 4); + mGridLayout->addItem(mChangeTestButton, 8, 0, 1, 2); + mGridLayout->addItem(mStartTestButton, 8, 2, 1, 4); + mGridLayout->addItem(mBreakButton, 9, 0, 1, 2); + mGridLayout->addItem(mTestCheckBox, 9, 2, 1, 4); + + setLayout(mGridLayout); + + mTimer = new QTimer(this); + + connect(mChangeTestButton, SIGNAL(released()), this, SIGNAL(viewChangedRequest())); + connect(mStartTestButton, SIGNAL(released()), this, SLOT(test())); + connect(mTimer, SIGNAL(timeout()), this, SLOT(timeout())); + connect(mBreakButton, SIGNAL(released()), this, SLOT(breakTest())); +} + +basewidget::~basewidget() +{ + delete mQItemsValidator; + delete mItemsValidator; + delete mQTimesValidator; + delete mTimesValidator; + delete mQKBytesValidator; + delete mKBytesValidator; +} + + +bool basewidget::TestCheckBoxChecked() const +{ + if( mTestCheckBox->checkState() == Qt::Checked ) { + return true; + } + return false; +} + +int basewidget::Bytes() const +{ + int kb = Edit2Int(mKBytesEdid); + return kb*1024; +} + +int basewidget::Times() const +{ + return Edit2Int(mTimesEdid); +} + +int basewidget::Items() const +{ + return Edit2Int(mItemsEdid); +} + +int basewidget::Edit2Int(const HbLineEdit* lineedit) const +{ + int retvalue = 0; + bool ok = false; + QString edittext = lineedit->text(); + retvalue = edittext.toInt(&ok); + if(ok) { + return retvalue; + } + return 0; +} + +void basewidget::prepareSave() +{ + clearSaveData(); + int bytes = Bytes(); + mByteArray = new QByteArray(bytes, 'a'); + + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + mPixmap = new QPixmap(QPixmap::grabWidget(mainWindow, mainWindow->rect())); + + mSaveVariant = new QVariant; + *mSaveVariant = *mByteArray; + delete mByteArray; + mByteArray = NULL; + + + mSaveMetadata = new QVariantHash; + mSaveMetadata->insert(ActivityScreenshotKeyword, *mPixmap); + delete mPixmap; + mPixmap = NULL; + +} + +void basewidget::clearSaveData() +{ + delete mByteArray; + mByteArray = NULL; + delete mPixmap; + mPixmap = NULL; + delete mSaveVariant; + mSaveVariant = NULL; + delete mSaveMetadata; + mSaveMetadata = NULL; +} + +bool basewidget::saveActivity(int name) +{ + QString display; + display.setNum(name); + mSaveMetadata->insert(ActivityApplicationName, display); + bool retok, ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "saveActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, display), Q_ARG(QVariant, *mSaveVariant), Q_ARG(QVariantHash, *mSaveMetadata)); + } + catch(...) { + return false; + } + + return ok && retok; +} + +bool basewidget::removeActivity(const QString& name) +{ + bool retok, ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name)); + } + catch(...) { + return false; + } + return ok && retok; +} + +bool basewidget::activities() +{ + bool ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "allActivities", Q_RETURN_ARG(QStringList, mActivities)); + } + catch(...) { + return false; + } + return ok; +} + +bool basewidget::privateData(const QString& name) +{ + QVariant data; + bool ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name)); + } + catch(...) { + return false; + } + return ok; +} + +bool basewidget::getThumbnail(const QString& name) +{ + QVariantHash metadata; + bool ok; + try { + ok = QMetaObject::invokeMethod(mActivityStorage, "activityMetaData", Q_RETURN_ARG(QVariantHash, metadata), Q_ARG(QString, name)); + } + catch(...) { + return false; + } + if(!ok) { + return false; + } + QString pixfile = metadata.value(ActivityScreenshotKeyword).toString(); + ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, QSize(128, 128)), Q_ARG(QString, pixfile), Q_ARG(void*, NULL)); + return ok; +} + +int basewidget::dbSize() +{ + _LIT(KFilePath, "c:\\private\\200267b4\\activity.db"); + TInt fileSize = 0; + RFs fs; + TInt err = fs.Connect(); + if (err == KErrNone) { + TEntry entry; + err = fs.Entry(KFilePath, entry); + if (err == KErrNone) { + fileSize = entry.iSize; + } + } + fs.Close(); + return fileSize; +} + +int basewidget::ClientHeapSize() +{ + RHeap& heap = User::Heap(); + TInt all=0; + heap.AllocSize(all); + return all; +} + +void basewidget::enableControls(bool enable) +{ + mStartTestButton->setEnabled(enable); + mChangeTestButton->setEnabled(enable); + mItemsEdid->setEnabled(enable); + mTimesEdid->setEnabled(enable); + mKBytesEdid->setEnabled(enable); + mTestCheckBox->setEnabled(enable); +} + +void basewidget::timeout() +{ + +} + +void basewidget::logFirst() +{ + int memclient = ClientHeapSize(); + int memdb = dbSize(); + mClientMemBefore = memclient; + mDbMemBefore = memdb; + + QString clinetKB; + clinetKB.setNum(memclient/1024.0, 'f', 2); + mClientMemBeforeLabel->setPlainText(clinetKB); + + QString dbKB; + dbKB.setNum(memdb/1024.0, 'f', 2); + mDbMemBeforeLabel->setPlainText(dbKB); + + *mStream<<"Client heap first: "; + *mStream<flush(); +} + +void basewidget::logLast() +{ + int memclient = ClientHeapSize(); + int memdb = dbSize(); + int clientdiff = memclient - mClientMemBefore; + int dbdiff = memdb - mDbMemBefore; + + QString clinetKB; + clinetKB.setNum(memclient/1024.0, 'f', 2); + mClientMemAfterLabel->setPlainText(clinetKB); + + QString dbKB; + dbKB.setNum(memdb/1024.0, 'f', 2); + mDbMemAfterLabel->setPlainText(dbKB); + + QString clientDiffKb; + clientDiffKb.setNum(clientdiff/1024.0, 'f', 2); + mClientMemDiffLabel->setPlainText(clientDiffKb); + + + QString dbDiffKb; + dbDiffKb.setNum(dbdiff/1024.0, 'f', 2); + mDbMemDiffLabel->setPlainText(dbDiffKb); + + *mStream<<"Client heap last: "; + *mStream<flush(); +} + +void basewidget::logBaseMessage() +{ + *mStream <<"action: "; + *mStream<flush(); +} + +void basewidget::logErrorMessage(const QString& mess) +{ + QString messlog("*Fail: "); + messlog += mess; + messlog += "*\n"; + *mStream<setPlainText(num); +} + +void basewidget::updateTimeLabel(int time) +{ + QString num; + num.setNum(time); + mTimesLabel->setPlainText(num); + +} + +void basewidget::updateActionLabel() +{ + mActionLabel->setPlainText(mAction); +} + +bool basewidget::checkActNum() +{ + int getact = mActivities.count(); + int expectedact = Items(); + if (getact != expectedact) { + *mStream<<"*Fail: Unexpected activities number got*\n"; + *mStream<<"Got: "<stop(); + if(reason == 0) { + mStatusValueLabel->setPlainText("End"); + } + else if(reason == 1) { + mStatusValueLabel->setPlainText("Error"); + } + else if(reason == 2) { + mStatusValueLabel->setPlainText("Break"); + } + emit testEnded(reason); +} + +void basewidget::releaseMem() +{ + mActivities.clear(); + clearSaveData(); +} + +void basewidget::setError(const QString& mess) +{ + releaseMem(); + logErrorMessage(mess); + if( mAction != "predel" && mAction != "presave" ) { + logLast(); + } + endTest(1); + enableControls(true); +} + +void basewidget::endNormally() +{ + releaseMem(); + logLast(); + endTest(0); + enableControls(true); +} + +void basewidget::breakTest() +{ + releaseMem(); + endTest(2); + *mStream<<"Breaked\n"; + mStream->flush(); + enableControls(true); +} + +void basewidget::logSettings() +{ + *mStream <<"items: "; + *mStream<flush(); +} + +void basewidget::clearLabels() +{ + mClientMemBeforeLabel->clear(); + mClientMemAfterLabel->clear(); + mClientMemDiffLabel->clear(); + mDbMemBeforeLabel->clear(); + mDbMemAfterLabel->clear(); + mDbMemDiffLabel->clear(); + mIterLabel->clear(); + mTimesLabel->clear(); + mStatusValueLabel->clear(); +} + +void basewidget::test() +{ + updateActionLabel(); + clearLabels(); + mTimer->start(1); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/basewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/basewidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,146 @@ +/* +* 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: +* +*/ +#ifndef BASEWIDGET_H_ +#define BASEWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class basewidget: public HbWidget +{ + Q_OBJECT +public: + basewidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent = 0); + ~basewidget(); + + +protected: + + +protected: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mStartTestButton; + HbPushButton *mChangeTestButton; + HbPushButton *mBreakButton; + HbCheckBox* mTestCheckBox; + HbLineEdit* mItemsEdid; + HbLineEdit* mTimesEdid; + HbLineEdit* mKBytesEdid; + HbLabel* mClientMemBeforeLabel; + HbLabel* mClientMemAfterLabel; + HbLabel* mClientMemDiffLabel; + HbLabel* mDbMemBeforeLabel; + HbLabel* mDbMemAfterLabel; + HbLabel* mDbMemDiffLabel; + HbLabel* mActionLabel; + HbLabel* mIterLabel; + HbLabel* mTimesLabel; + HbLabel* mStatusLabel; + HbLabel* mStatusValueLabel; + HbLabel* mTimesEditLabel; + HbLabel* mBytesEditLabel; + HbLabel* mItemsEditLabel; + + QIntValidator* mQItemsValidator; + HbValidator* mItemsValidator; + QIntValidator* mQTimesValidator; + HbValidator* mTimesValidator; + QIntValidator* mQKBytesValidator; + HbValidator* mKBytesValidator; + + QObject* mActivityStorage; + QObject* mActivityManager; + QPixmap* mPixmap; + QByteArray* mByteArray; + + int mItemsCounter; + int mTimesCounter; + int mItems; + int mTimes; + int mClientMemBefore; + int mDbMemBefore; + + QTimer* mTimer; + QTextStream* mStream; + + QVariant* mSaveVariant; + QVariantHash* mSaveMetadata; + QStringList mActivities; + QString mAction; + + +signals: + void viewChangedRequest(); + void testEnded(int reason); + +protected slots: + virtual void timeout(); + virtual void test(); + void breakTest(); + +public: + +protected: + bool TestCheckBoxChecked() const; + int Bytes() const; + int Times() const; + int Items() const; + int Edit2Int(const HbLineEdit* lineedit) const; + void prepareSave(); + void clearSaveData(); + bool saveActivity(int name); + bool removeActivity(const QString& name); + bool privateData(const QString& name); + bool getThumbnail(const QString& name); + bool activities(); + int dbSize(); + int ClientHeapSize(); + void enableControls(bool enable); + void logFirst(); + void logLast(); + void logBaseMessage(); + void logErrorMessage(const QString& mess); + void updateItemLabel(int item); + void updateTimeLabel(int time); + void updateActionLabel(); + bool checkActNum(); + void releaseMem(); + virtual void endTest(int reason); + void setError(const QString& mess); + void endNormally(); + void logSettings(); + void clearLabels(); + + + +}; + +#endif /* BASEWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/datawidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/datawidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,142 @@ +/* +* 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 "datawidget.h" + + + +datawidget::datawidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent) + : basewidget(activityStorage, activityManager, stream, parent) +{ + mTestCheckBox->setText("Prepare data"); + mStartTestButton->setText("Data"); +} + +datawidget::~datawidget() +{ +} + + +void datawidget::timeout() +{ + if(mAction == "predel") { + if(mItemsCountersetPlainText("Pending"); + enableControls(false); + *mStream<flush(); + logSettings(); + bool ok = activities(); + if(!ok) { + setError("get activities list"); + return; + } + if (TestCheckBoxChecked()) { + mAction = "predel"; + mItems = mActivities.count(); + } + else { + mAction = "data"; + ok = checkActNum(); + if(!ok) { + setError("unexpected act number"); + return; + } + mItems=Items(); + mTimes=Times(); + mItemsCounter = 0; + updateItemLabel(mItemsCounter); + updateTimeLabel(mTimesCounter); + logFirst(); + connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + } + basewidget::test(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/datawidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/datawidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +/* +* 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: +* +*/ +#ifndef DATAWIDGET_H_ +#define DATAWIDGET_H_ + +#include "basewidget.h" + +class datawidget: public basewidget +{ + Q_OBJECT +public: + datawidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent = 0); + ~datawidget(); + +private slots: + void timeout(); + void test(); + +}; + +#endif /* DATAWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/lptapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/lptapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = lptapp + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +basewidget.cpp\ +savedelwidget.cpp\ +datawidget.cpp\ +thumbwidget.cpp\ +viewmanager.cpp\ + +HEADERS += viewmanager.h\ +savedelwidget.h\ +datawidget.h\ +thumbwidget.h\ +basewidget.h\ + +LIBS += -lefsrv + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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 +#include +#include "viewmanager.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + + viewmanager mainWindow; + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/savedelwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/savedelwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,140 @@ +/* +* 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 "savedelwidget.h" + + + +savedelwidget::savedelwidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent) + : basewidget(activityStorage, activityManager, stream, parent) +{ + mStartTestButton->setText("Save"); +} + +savedelwidget::~savedelwidget() +{ +} + + +void savedelwidget::timeout() +{ + if(mAction == "predel") { + if(mItemsCountersetPlainText("Pending"); + enableControls(false); + *mStream<flush(); + mAction = "predel"; + bool ok = activities(); + if(!ok) { + setError("get activities list"); + return; + } + mItems = mActivities.count(); + basewidget::test(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/savedelwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/savedelwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +/* +* 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: +* +*/ +#ifndef SAVEDELWIDGET_H_ +#define SAVEDELWIDGET_H_ + +#include "basewidget.h" + +class savedelwidget: public basewidget +{ + Q_OBJECT +public: + savedelwidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent = 0); + ~savedelwidget(); + +private slots: + void timeout(); + void test(); + +}; + +#endif /* SAVEDELWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/thumbwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/thumbwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,160 @@ +/* +* 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 "thumbwidget.h" + + + +thumbwidget::thumbwidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent) + : basewidget(activityStorage, activityManager, stream, parent) +{ + mTestCheckBox->setText("Prepare data"); + mKBytesEdid->setText("1"); + mStartTestButton->setText("Thumb"); +} + +thumbwidget::~thumbwidget() +{ +} + + +void thumbwidget::timeout() +{ + if(mAction == "predel") { + if(mItemsCounterstop(); + } + else { + mTimesCounter++; + mItemsCounter = 0; + //updateItemLabel(mItemsCounter); + updateTimeLabel(mTimesCounter); + } + } + else { + setError("unexpected state"); + } +} + +void thumbwidget::test() +{ + mTimesCounter = 0; + mStatusValueLabel->setPlainText("Pending"); + enableControls(false); + *mStream<flush(); + logSettings(); + bool ok = activities(); + if(!ok) { + setError("get activities list"); + return; + } + if (TestCheckBoxChecked()) { + mAction = "predel"; + mItems = mActivities.count(); + } + else { + mAction = "thumb"; + ok = checkActNum(); + if(!ok) { + setError("unexpected act number"); + return; + } + mItems=Items(); + mTimes=Times(); + mItemsCounter = 0; + updateItemLabel(mItemsCounter); + updateTimeLabel(mTimesCounter); + logFirst(); + connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + } + basewidget::test(); +} + +void thumbwidget::thumbnailReady(QPixmap pixmap, void* ptr) +{ + if(pixmap.isNull()) { + setError("Null pixmap"); + return; + } + mTimer->start(1); +} + +void thumbwidget::endTest(int reason) +{ + disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) ); + basewidget::endTest(reason); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/thumbwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/thumbwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef THUMBWIDGET_H_ +#define THUMBWIDGET_H_ + +#include "basewidget.h" + +class thumbwidget: public basewidget +{ + Q_OBJECT +public: + thumbwidget(QObject* activityStorage, QObject* activityManager, QTextStream* stream, QGraphicsItem *parent = 0); + ~thumbwidget(); + +private slots: + void timeout(); + void test(); + void thumbnailReady(QPixmap pixmap, void* ptr); +private: + void endTest(int reason); +}; + +#endif /* THUMBWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,87 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include "viewmanager.h" +#include "savedelwidget.h" +#include "datawidget.h" +#include "thumbwidget.h" +#include "afstorageglobals.h" +#include +#include + +QTM_USE_NAMESPACE + +viewmanager::viewmanager(): + HbMainWindow() +{ + QServiceManager serviceManager; + mActivityStorage = serviceManager.loadInterface("com.nokia.qt.activities.Storage"); + if (!mActivityStorage) { + qFatal("load Storage plugin failed"); + } + + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + if (!mActivityManager) { + qFatal("load Manger plugin failed"); + } + + mFile = new QFile("c:\\data\\lpt.txt"); + mFile->open(QIODevice::Append | QIODevice::Text); + mStream = new QTextStream(mFile); + mSaveDelWidget = new savedelwidget(mActivityStorage, mActivityManager, mStream); + mSaveDelView = addView(mSaveDelWidget); + mSaveDelView->setTitle("SaveDel"); + mDataWidget = new datawidget(mActivityStorage, mActivityManager, mStream); + mDataView = addView(mDataWidget); + mDataView->setTitle("Data"); + mThumbWidget = new thumbwidget(mActivityStorage, mActivityManager, mStream); + mThumbView = addView(mThumbWidget); + mThumbView->setTitle("Thumb"); + setCurrentView(mSaveDelView); + + connect(mSaveDelWidget, SIGNAL(viewChangedRequest()), this, SLOT(toData())); + connect(mDataWidget, SIGNAL(viewChangedRequest()), this, SLOT(toThumb())); + connect(mThumbWidget, SIGNAL(viewChangedRequest()), this, SLOT(toSaveDel())); +} + +viewmanager::~viewmanager() +{ + delete mActivityStorage; + delete mActivityManager; + delete mFile; + delete mStream; +} + +void viewmanager::toSaveDel() +{ + setCurrentView(mSaveDelView); +} + +void viewmanager::toData() +{ + setCurrentView(mDataView); +} + +void viewmanager::toThumb() +{ + setCurrentView(mThumbView); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/lptapp/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/lptapp/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +#include +#include + +class basewidget; +class QFile; +class QTextStream; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(); + virtual ~viewmanager(); + +private: + basewidget* mSaveDelWidget; + HbView* mSaveDelView; + basewidget* mDataWidget; + HbView* mDataView; + basewidget* mThumbWidget; + HbView* mThumbView; + QFile* mFile; + QTextStream* mStream; + +private slots: + void toSaveDel(); + void toData(); + void toThumb(); + +public slots: + + +signals: + + +public: + + +private: + QObject* mActivityStorage; + QObject* mActivityManager; +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/nftapps.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/nftapps.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += lptapp +SUBDIRS += lowmemoryapp diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/nftapps/sis/lptapp.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/nftapps/sis/lptapp.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +; X:/hs/homescreensrv/activityfw/testapplications/nftapps/lptapp//lptapp_template.pkg generated by qmake at 2010-07-28T14:29:51 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + + +; SIS header: name, uid, version +#{"lptapp"},(0xE5d1c651),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + + +; Manual PKG pre-rules from PRO files +; Default dependency to Qt libraries + +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} +[0x20022e6d],0,0,0,{"S60ProductID"} + +; Default dependency to QtMobility libraries +(0x2002AC89), 1, 0, 2, {"QtMobility"} + +; Executable and default resource files +"/epoc32/release/armv5/urel/lptapp.exe" - "!:\sys\bin\lptapp.exe" +"/epoc32/data/z/resource/apps/lptapp.rsc" - "!:\resource\apps\lptapp.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/lptapp_reg.rsc" - "!:\private\10003a3f\import\apps\lptapp_reg.rsc" + +"/epoc32/release/armv5/urel/lowmemoryapp.exe" - "!:\sys\bin\lowmemoryapp.exe" +"/epoc32/data/z/resource/apps/lowmemoryapp.rsc" - "!:\resource\apps\lowmemoryapp.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/lowmemoryapp_reg.rsc" - "!:\private\10003a3f\import\apps\lowmemoryapp_reg.rsc" + +; Manual PKG post-rules from PRO files diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/simplehbapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/simplehbapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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 +#include + +int main(int argc, char **argv) +{ + HbApplication a( argc, argv ); + + HbMainWindow mainWindow; + mainWindow.show(); + + return a.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/simplehbapp/simplehbapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/simplehbapp/simplehbapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,23 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = simplehbapp + +load(hb.prf) +CONFIG -= symbian_i18n + +SOURCES = main.cpp diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/sis/testapplications.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/sis/testapplications.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,73 @@ +; activitytestletter_template.pkg generated by qmake at 2010-04-13T10:42:42 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + +; SIS header: name, uid, version +#{"testapplications"},(0xEd92f9a1),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + + +; Manual PKG pre-rules from PRO files +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +; Default dependency to QtMobility libraries +(0x2002AC89), 1, 0, 0, {"QtMobility"} + +; Executable and default resource files +"/epoc32/release/armv5/urel/activitytestletter.exe" - "!:\sys\bin\activitytestletter.exe" +"/epoc32/data/z/resource/apps/activitytestletter.rsc" - "!:\resource\apps\activitytestletter.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitytestletter_reg.rsc" - "!:\private\10003a3f\import\apps\activitytestletter_reg.rsc" + +"/epoc32/release/armv5/urel/hbmeasuretest.exe" - "!:\sys\bin\hbmeasuretest.exe" +"/epoc32/data/z/resource/apps/hbmeasuretest.rsc" - "!:\resource\apps\hbmeasuretest.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/hbmeasuretest_reg.rsc" - "!:\private\10003a3f\import\apps\hbmeasuretest_reg.rsc" + +"/epoc32/release/armv5/urel/activitydebugger.exe" - "!:\sys\bin\activitydebugger.exe" +"/epoc32/data/z/resource/apps/activitydebugger.rsc" - "!:\resource\apps\activitydebugger.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitydebugger_reg.rsc" - "!:\private\10003a3f\import\apps\activitydebugger_reg.rsc" + +"/epoc32/release/armv5/urel/activitytestmodel.exe" - "!:\sys\bin\activitytestmodel.exe" +"/epoc32/data/z/resource/apps/activitytestmodel.rsc" - "!:\resource\apps\activitytestmodel.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitytestmodel_reg.rsc" - "!:\private\10003a3f\import\apps\activitytestmodel_reg.rsc" + +"/epoc32/release/armv5/urel/activitytestanimal.exe" - "!:\sys\bin\activitytestanimal.exe" +"/epoc32/data/z/resource/apps/activitytestanimal.rsc" - "!:\resource\apps\activitytestanimal.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitytestanimal_reg.rsc" - "!:\private\10003a3f\import\apps\activitytestanimal_reg.rsc" + +"/epoc32/release/armv5/urel/activitytestfigure.exe" - "!:\sys\bin\activitytestfigure.exe" +"/epoc32/data/z/resource/apps/activitytestfigure.rsc" - "!:\resource\apps\activitytestfigure.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitytestfigure_reg.rsc" - "!:\private\10003a3f\import\apps\activitytestfigure_reg.rsc" + +"/epoc32/release/armv5/urel/activitytestmodelhbintegration.exe" - "!:\sys\bin\activitytestmodelhbintegration.exe" +"/epoc32/data/z/resource/apps/activitytestmodelhbintegration.rsc" - "!:\resource\apps\activitytestmodelhbintegration.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitytestmodelhbintegration_reg.rsc" - "!:\private\10003a3f\import\apps\activitytestmodelhbintegration_reg.rsc" + +"/epoc32/release/armv5/urel/simplehbapp.exe" - "!:\sys\bin\simplehbapp.exe" +"/epoc32/data/z/resource/apps/simplehbapp.rsc" - "!:\resource\apps\simplehbapp.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/simplehbapp_reg.rsc" - "!:\private\10003a3f\import\apps\simplehbapp_reg.rsc" + +"/epoc32/release/armv5/urel/appactluncher.exe" - "!:\sys\bin\appactluncher.exe" +"/epoc32/data/z/resource/apps/appactluncher.rsc" - "!:\resource\apps\appactluncher.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/appactluncher_reg.rsc" - "!:\private\10003a3f\import\apps\appactluncher_reg.rsc" + +"/epoc32/release/armv5/urel/apptostart.exe" - "!:\sys\bin\apptostart.exe" +"/epoc32/data/z/resource/apps/apptostart.rsc" - "!:\resource\apps\apptostart.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/apptostart_reg.rsc" - "!:\private\10003a3f\import\apps\apptostart_reg.rsc" + +"/epoc32/release/armv5/urel/activitytakeawhile.exe" - "!:\sys\bin\activitytakeawhile.exe" +"/epoc32/data/z/resource/apps/activitytakeawhile.rsc" - "!:\resource\apps\activitytakeawhile.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitytakeawhile_reg.rsc" - "!:\private\10003a3f\import\apps\activitytakeawhile_reg.rsc" + +; Manual PKG post-rules from PRO files diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/testapplications/testapplications.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/testapplications/testapplications.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += activitytestanimal +SUBDIRS += activitytestmodelhbintegration +SUBDIRS += activitytestmodel +SUBDIRS += activitytestletter +SUBDIRS += activitytestfigure +SUBDIRS += activitydebugger +SUBDIRS += simplehbapp +SUBDIRS += hbmeasuretest +SUBDIRS += appactluncher +SUBDIRS += apptostart +SUBDIRS += activitytakeawhile \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/data/image_file.png Binary file activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/data/image_file.png has changed diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/inc/t_tsgraphicfilescalinghandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/inc/t_tsgraphicfilescalinghandler.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,77 @@ +//Copyright (c) 2010 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: + +///////////////////////////////////////////////////////////////////// + +#ifndef T_TSGRAPHICFILESCALINGHANDLER_H +#define T_TSGRAPHICFILESCALINGHANDLER_H + +// INCLUDED FILES +#include + #include +#include "tsgraphicfilescalinghandler.h" + +class T_CTsGraphicFileScalingHandler : + public QObject, + public MImageReadyCallBack +{ + Q_OBJECT + +private: + static TInt CallStop(TAny *aWait); + static void WaitActive(TInt aTime); + +//From MImageReadyCallBack +private: + virtual void ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap); + +public: + explicit T_CTsGraphicFileScalingHandler(QObject *parent = 0); + virtual ~T_CTsGraphicFileScalingHandler(); + +private slots: + +// tests for file path and kind of graphic file as imput + void testGraphicFileScalingIgnoreAspectRatio_LessWidth(); + void testGraphicFileScalingIgnoreAspectRatio_LessHeight(); + void testGraphicFileScalingIgnoreAspectRatio_TheSameRatio(); + void testGraphicFileScalingKeepAspectRatio_LessWidth(); + void testGraphicFileScalingKeepAspectRatio_LessHeight(); + void testGraphicFileScalingKeepAspectRatio_TheSameRatio(); + void testGraphicFileScalingKeepAspectRatioByExpanding_LessWidth(); + void testGraphicFileScalingKeepAspectRatioByExpanding_LessHeight(); + void testGraphicFileScalingKeepAspectRatioByExpanding_TheSameRatio(); + +// tests incorrect situation + void testGraphicFileScalingInvalidImagePath(); + void testGraphicFileScalingEmptyImagePath(); + void testGraphicFileScalingEmptyMimeType(); + void testGraphicFileScalingScalingToIncorrectWidthSize(); + void testGraphicFileScalingScalingToIncorrectHeightSize(); + void testGraphicFileScalingScalingToZeroSize(); + void testDoCancel(); + +// tests for CFbsBitmap as imput + void testCFbsBitmapScalingToCorrectSize(); + void testCFbsBitmapScalinToIncorrectWidthSize(); + void testCFbsBitmapScalinToIncorrectHeightSize(); + +private: + RFs mFs; + QPixmap mPixMapCallBack; + TInt mErrorCallBack; +}; + +#endif // T_TSGRAPHICFILESCALINGHANDLER_H +// End of File diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/src/t_tsgraphicfilescalinghandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/src/t_tsgraphicfilescalinghandler.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,550 @@ +//Copyright (c) 2010 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: + +///////////////////////////////////////////////////////////////////// + +// INCLUDED FILES +#include +#include "t_tsgraphicfilescalinghandler.h" + +_LIT(KFileName, "c:\\data\\Images\\Pictures\\image_file.png"); +_LIT8(KMimeType, "image/png"); +QString KFileName2("c:\\data\\Images\\Pictures\\image_file.png"); + +const TSize KOriginalSize(480, 236); +const TSize KWanted_TheSameRatio(KOriginalSize.iWidth/2, KOriginalSize.iHeight/2); +const TSize KWanted_LessWidth(KOriginalSize.iWidth/2, KOriginalSize.iHeight); +const TSize KWanted_LessHeight(KOriginalSize.iWidth, KOriginalSize.iHeight/2); + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +QTEST_MAIN(T_CTsGraphicFileScalingHandler) + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +T_CTsGraphicFileScalingHandler::T_CTsGraphicFileScalingHandler(QObject *parent) : + QObject(parent), + mErrorCallBack(KErrNone) +{ + User::LeaveIfError(mFs.Connect()); + User::LeaveIfError(RFbsSession::Connect(mFs)); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +T_CTsGraphicFileScalingHandler::~T_CTsGraphicFileScalingHandler() +{ + mFs.Close(); + RFbsSession::Disconnect(); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::WaitActive(TInt aTime) +{ + CActiveSchedulerWait *wait = new (ELeave)CActiveSchedulerWait(); + CPeriodic *periodic = CPeriodic::NewL(CActive::EPriorityIdle); + periodic->Start(aTime, aTime, TCallBack(CallStop, wait)); + wait->Start(); + delete periodic; + delete wait; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +TInt T_CTsGraphicFileScalingHandler::CallStop(TAny *aWait) +{ + (static_cast(aWait))->AsyncStop(); + return 1; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingIgnoreAspectRatio_LessWidth() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_LessWidth + /*CTsGraphicFileScalingHandler::EIgnoreAspectRatio*/)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_LessWidth.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_LessWidth.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingIgnoreAspectRatio_LessHeight() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_LessHeight + /*CTsGraphicFileScalingHandler::EIgnoreAspectRatio*/)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_LessHeight.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_LessHeight.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingIgnoreAspectRatio_TheSameRatio() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_TheSameRatio + /*CTsGraphicFileScalingHandler::EIgnoreAspectRatio*/)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_TheSameRatio.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_TheSameRatio.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingKeepAspectRatio_LessWidth() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_LessWidth, + CTsGraphicFileScalingHandler::EKeepAspectRatio)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QVERIFY(mPixMapCallBack.width() <= KWanted_LessWidth.iWidth); + QVERIFY(mPixMapCallBack.height() <= KWanted_LessWidth.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingKeepAspectRatio_LessHeight() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_LessHeight, + CTsGraphicFileScalingHandler::EKeepAspectRatio)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QVERIFY(mPixMapCallBack.width() <= KWanted_LessHeight.iWidth); + QVERIFY(mPixMapCallBack.height() <= KWanted_LessHeight.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingKeepAspectRatio_TheSameRatio() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_TheSameRatio, + CTsGraphicFileScalingHandler::EKeepAspectRatio)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QVERIFY(mPixMapCallBack.width() <= KWanted_TheSameRatio.iWidth); + QVERIFY(mPixMapCallBack.height() <= KWanted_TheSameRatio.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingKeepAspectRatioByExpanding_LessWidth() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_LessWidth, + CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_LessWidth.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_LessWidth.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingKeepAspectRatioByExpanding_LessHeight() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_LessHeight, + CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_LessHeight.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_LessHeight.iHeight); + delete screenShotHadnler; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingKeepAspectRatioByExpanding_TheSameRatio() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + mFs, + KFileName, + KMimeType, + KWanted_TheSameRatio, + CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding)); + + QCOMPARE(errNo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_TheSameRatio.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_TheSameRatio.iHeight); + delete screenShotHadnler; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testGraphicFileScalingInvalidImagePath() +{ + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + TSize newSize(240, 118); + _LIT(wrongImagePath, "c:\\data\\Images\\Pictures\\Cancel(); + + WaitActive(5000000); + QCOMPARE(mErrorCallBack, KErrCancel); + QVERIFY(mPixMapCallBack.isNull()); + delete screenShotHadnler; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testCFbsBitmapScalingToCorrectSize() +{ + QPixmap imputPixMap(KFileName2); + + CFbsBitmap *cFbsBitmap = new(ELeave)CFbsBitmap(); + QVERIFY(cFbsBitmap = imputPixMap.toSymbianCFbsBitmap()); + + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + + TRAPD(errNoo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + *cFbsBitmap, + KWanted_LessHeight)); + + QCOMPARE(errNoo, KErrNone); + WaitActive(5000000); + + QVERIFY(!mErrorCallBack); + QVERIFY(!mPixMapCallBack.isNull()); + QCOMPARE(mPixMapCallBack.width(), KWanted_LessHeight.iWidth); + QCOMPARE(mPixMapCallBack.height(), KWanted_LessHeight.iHeight); + + delete screenShotHadnler; + delete cFbsBitmap; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testCFbsBitmapScalinToIncorrectWidthSize() +{ + QPixmap imputPixMap(KFileName2); + + CFbsBitmap *cFbsBitmap = new(ELeave)CFbsBitmap(); + QVERIFY(cFbsBitmap = imputPixMap.toSymbianCFbsBitmap()); + + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + TSize newSize(-20, 118); + + TRAPD(errNoo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + *cFbsBitmap, + newSize)); + + QCOMPARE(errNoo, KErrCorrupt); + WaitActive(5000000); + + delete screenShotHadnler; + delete cFbsBitmap; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::testCFbsBitmapScalinToIncorrectHeightSize() +{ + QPixmap imputPixMap(KFileName2); + + CFbsBitmap *cFbsBitmap = new(ELeave)CFbsBitmap(); + QVERIFY(cFbsBitmap = imputPixMap.toSymbianCFbsBitmap()); + + CTsGraphicFileScalingHandler *screenShotHadnler = 0; + TSize newSize(240, -20); + + TRAPD(errNoo, screenShotHadnler = + CTsGraphicFileScalingHandler::NewL(*this, + *cFbsBitmap, + newSize)); + + QCOMPARE(errNoo, KErrCorrupt); + WaitActive(5000000); + + delete screenShotHadnler; + delete cFbsBitmap; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_CTsGraphicFileScalingHandler::ImageReadyCallBack(TInt error, + const CFbsBitmap *bitmap) +{ + CFbsBitmap *retBitmap = const_cast(bitmap); + + mErrorCallBack = error; + mPixMapCallBack = QPixmap(); + + if (retBitmap && !error) { + mPixMapCallBack = QPixmap::fromSymbianCFbsBitmap(retBitmap); + } +} + +// End of KFileName diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/t_tsgraphicfilescalinghandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler/t_tsgraphicfilescalinghandler.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +# +# 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: +# +CONFIG += qtestlib console + +HEADERS += ./inc/t_tsgraphicfilescalinghandler.h +HEADERS += ../../inc/tsgraphicfilescalinghandler.h + +SOURCES += ./src/t_tsgraphicfilescalinghandler.cpp +SOURCES += ../../src/tsgraphicfilescalinghandler.cpp + +LIBS += -lbitmaptransforms \ + -limageconversion \ + -lfbscli \ + -lapparc \ + -lapgrfx \ + -lcone \ + -lefsrv \ + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + export.sources = ./data/image_file.png + export.path = c:/data/Images/Pictures/ + DEPLOYMENT += export +} diff -r 3ab5c078b490 -r c63ee96dbe5f activityfw/tsutils/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/tsutils/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,28 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += symbian_tests + + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test +} + + +SUBDIRS += t_tsgraphicfilescalinghandler \ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX Binary file contentstorage/caclient/tsrc/t_caclient/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/data/castorage.db Binary file contentstorage/caclient/tsrc/t_caclient/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/data/emailTest.qm Binary file contentstorage/caclient/tsrc/t_caclient/data/emailTest.qm has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx Binary file contentstorage/caclient/tsrc/t_caclient/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../../.."); + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system('ctcwrap -i fd -2comp -C "EXCLUDE=*" -C "EXCLUDE+./srvsrc/casrvengutils.cpp" -C "NO_EXCLUDE+srvsrc/menusrvmain.cpp" -C "NO_EXCLUDE+srvsrc/casrv.cpp" -C "NO_EXCLUDE+srvsrc/cadatamanager.cpp" -C "NO_EXCLUDE+srvsrc/casrveng.cpp" -C "NO_EXCLUDE+srvsrc/casrvnotifier.cpp" -C "NO_EXCLUDE+srvsrc/casrvsession.cpp" -C "NO_EXCLUDE+srvsrc/castorageproxy.cpp" -C "NO_EXCLUDE+cautils/src/cai*" -C "NO_EXCLUDE+cautils/src/cae*" -C "NO_EXCLUDE+cautils/src/cal*" -C "NO_EXCLUDE+extsrc/cai*" -C "NO_EXCLUDE+casrv/casrvmgr/src/casrvmanager.cpp" -C "NO_EXCLUDE+caclient/s60/src/*" -C "NO_EXCLUDE+caclient/src/*" sbs -j 4 -c winscw_udeb'); + + chdir("caclient/tsrc/t_caclient"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs clean -c winscw_udeb"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_caclient -o c:\\t_caclient.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../../.."); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o caclient/tsrc/t_caclient/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o caclient/tsrc/t_caclient/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/inc/t_caclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/inc/t_caclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,383 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +#ifndef T_CACLIENT_H +#define T_CACLIENT_H + +#include +#include "cadefs.h" + +#ifdef Q_OS_SYMBIAN +#include +#endif + +class CaService; +class CaEntry; +class CaItemModel; + +/** + * @test Test class for hsmcsserviceprovider library. + */ +class TestCaClient : public QObject +{ + Q_OBJECT + +private slots: + +#ifdef Q_OS_SYMBIAN + //executeCommand + void TestExecuteCommandRemove(); + + void TestExecuteCommandOpen(); +#endif //Q_OS_SYMBIAN + + /** + * initialize + */ + void initTestCase(); + + //localization + + void TestLocalizationEntryGetters(); + + void TestLocalizationTApp(); + + void TestCreateLocalizedItem(); + +// query&entry getters + void TestEntryGetters(); + + void TestEntryAssignmentOperator(); + + void TestQueryGetters(); + + void TestQueryClear(); + + void TestQueryRemove(); + + void TestQueryAssignmentOperator(); + + void TestMakeDefaultCollectionIcon(); + + void TestMakeDefaultApplicationIcon(); + + void TestMakeNotNativeApplicationIcon(); + + void TestMakeExistingIcon(); + + void TestMakeNotExistingIcon(); + + void TestGetEntryIcon(); + void TestGetApplicationIcon(); + void TestGetIconFromEntry(); + void TestGetIconFromApparc(); + void TestGetDefaultIcon(); + + +//create&update + void TestUpdateItem(); + + void TestCreateItem(); + + void TestCreateGroup(); + + void TestCreateItemNotAllParams(); + + void TestCreateGroupNotAllParams(); + + void TestUpdateGroup(); + +//remove + void TestRemoveItem(); + + void TestRemoveGroup(); + + void TestRemoveItems(); + + void TestRemoveItemsFail(); + + void TestRemoveGroups(); + + void TestRemoveGroupsFail(); + +// backup + + void TestCreateBackupNotifier(); + + void TestBackupNotifierRunL(); + + +//organize + + void TestAppendEntryIntoGroup1(); + + void TestAppendEntryIntoGroup2(); + + void TestAppendEntriesIntoGroup1(); + + void TestAppendEntriesIntoGroup2(); + + void TestPrependEntryIntoGroup1(); + + void TestPrependEntryIntoGroup2(); + + void TestPrependEntriesIntoGroup1(); + + void TestPrependEntriesIntoGroup2(); + + void TestInsertEntryIntoGroup1(); + + void TestInsertEntryIntoGroup2(); + + void TestInsertEntriesIntoGroup1(); + + void TestInsertEntriesIntoGroup2(); + + void TestRemoveEntryFromGroup1(); + + void TestRemoveEntryFromGroup2(); + + void TestRemoveEntriesFromGroup1(); + + void TestRemoveEntriesFromGroup2(); + + void TestCustomSort(); + + void TestCustomSortArrange(); + + void TestCustomSortGroups(); + + void TestCustomSortFake(); + + +//get entries + void TestGetEntry(); + + void TestGetEntriesByIds(); + + void TestGetEntriesByRole(); + + void TestGetEntriesByParent(); + + void TestGetEntriesByType1(); + + void TestGetEntriesByType2(); + + void TestGetEntriesByFlagsOn(); + + void TestGetEntriesByFlagsOff(); + + void TestGetEntriesByFlagsOnOff(); + + void TestGetEntriesByRoleParent(); + + void TestGetEntriesByRoleType(); + + void TestGetEntriesByRoleFlags(); + + void TestGetEntriesByParentType(); + + void TestGetEntriesByParentFlags(); + + void TestGetEntriesByTypeFlags(); + + void TestGetEntriesByRoleParentType(); + + void TestGetEntriesByRoleParentFlags(); + + void TestGetEntriesByParentTypeFlags(); + + void TestGetEntriesByRoleParentTypeFlags(); + + void TestGetEntriesCount(); + + void TestGetEntriesSortCreated(); + + void TestGetEntriesSortDefault(); + + void TestGetEntriesSortName(); + + void TestGetEntriesSortLast(); + + void TestGetEntriesSortMost(); + + void TestGetEntriesIdsByRole(); + + void TestGetEntriesIdsByParent(); + + void TestGetEntriesIdsByType1(); + + void TestGetEntriesIdsByType2(); + + void TestGetEntriesIdsByFlagsOn(); + + void TestGetEntriesIdsByFlagsOff(); + + void TestGetEntriesIdsByFlagsOnOff(); + + void TestGetEntriesIdsByRoleParent(); + + void TestGetEntriesIdsByRoleType(); + + void TestGetEntriesIdsByRoleFlags(); + + void TestGetEntriesIdsByParentType(); + + void TestGetEntriesIdsByParentFlags(); + + void TestGetEntriesIdsByTypeFlags(); + + void TestGetEntriesIdsByRoleParentType(); + + void TestGetEntriesIdsByRoleParentFlags(); + + void TestGetEntriesIdsByParentTypeFlags(); + + void TestGetEntriesIdsByRoleParentTypeFlags(); + + void TestGetEntriesIdsCount(); + + void TestGetEntriesIdsSortDefault(); + + void TestGetEntriesIdsSortCreated(); + + void TestGetEntriesIdsSortName(); + + void TestGetEntriesIdsSortLast(); + + void TestGetEntriesIdsSortMost(); + + void TestGetEntriesByAttributes(); + + //caitemmodel + void TestCaItemModelConstruct(); + void TestCaItemModelAutoUpdate(); + void TestCaItemModelIndex(); + void TestCaItemModelData(); + void TestCaItemModelIconSize(); + void TestCaItemModelChangeParent(); + void TestCaItemModelSortOrder(); + void TestCaItemModelUpdateItem(); + void TestCaItemModelAddItems(); + void TestCaItemModelEmptySignal(); + +// notifier + + void TestAssignmentOperatorNotifier(); + + void TestAddItemChangeTypeNotifier(); + void TestAddGroupChangeTypeNotifier(); + + void TestRemoveEntryChangeTypeNotifier(); + void TestRemoveEntryIdChangeTypeNotifier(); + void TestRemoveEntryChangeTypeNotifierFake(); + void TestRemoveEntryIdChangeTypeNotifierFake(); + void TestRemoveEntriesChangeTypeNotifier(); + void TestRemoveEntriesIdsChangeTypeNotifier(); + void TestRemoveEntriesChangeTypeNotifierFake(); + void TestRemoveEntriesIdsChangeTypeNotifierFake(); + void TestRemoveGroupChangeTypeNotifier(); + void TestRemoveGroupsChangeTypeNotifier(); + + void TestUpdateChangeTypeNotifier(); + void TestUpdateChangeTypeNotifierFake(); + void TestAddUpdateRemove(); + + void TestRegisterNotifier(); + void TestUnregisterNotifier(); + + void TestTouchEntryNotifier(); + void TestTouchEntryIdNotifier(); + void TestTouchEntryUidNotifier(); + void TestTouchEntryNotifierFake(); + void TestTouchEntryIdNotifierFake(); + void TestTouchGroupNotifier(); + + void TestAppendEntryGroupNotifier(); + void TestAppendEntryGroupIdNotifier(); + void TestAppendEntriesGroupNotifier(); + void TestAppendEntriesGroupIdNotifier(); + + void TestPrependEntryGroupNotifier(); + void TestPrependEntryGroupIdNotifier(); + void TestPrependEntriesGroupNotifier(); + void TestPrependEntriesGroupIdNotifier(); + + void TestRemoveEntryGroupNotifier(); + void TestRemoveEntryGroupIdNotifier(); + void TestRemoveEntriesGroupNotifier(); + void TestRemoveEntriesGroupIdNotifier(); + + void TestInsertEntryGroupNotifier(); + void TestInsertEntryGroupIdNotifier(); + void TestInsertEntriesGroupNotifier(); + void TestInsertEntriesGroupIdNotifier(); + + void TestChangeEntryWithParentIdNotifier(); + + + + void TestRemoveEntriesChangeTypeNotifier3Clients(); + + void TestAddItemChangeTypeNotifierNClients(); + void TestAddItemChangeTypeNotifierNClientsFast(); + void TestAddItemChangeTypeNotifierNClientsThreads(); + + void TestRemoveEntryChangeTypeNotifierNClients(); + void TestRemoveEntryChangeTypeNotifierNClientsThreads(); + void TestRemoveEntryIdChangeTypeNotifierNClientsThreads(); + + void TestAddItemChangeTypeNotifierManyClientsThreads(); + //void TestRemoveEntriesChangeTypeNotifier3Clients(); + + // void TestAppendRemoveEntryGroupNotifier(); + + void TestCreateItemWhenServerWasTerminated(); + + void TestAddItemChangeTypeNotifier3Clients(); + void TestRemoveEntryChangeTypeNotifier3Clients(); + + /** + * cleanup + */ + void cleanupTestCase(); + +private: + void startThread(); + void stopThread(); + // utility methods + QSharedPointer createGroup(const QString &groupName, const QString &typeName); + QSharedPointer createItem(const QString &itemName, const QString &description, + const QString &typeName, EntryFlags flags); + QSharedPointer createItem(const QString &itemName, const QString &typeName); + void addItemToGroup(int groupId, int itemId); + void removeItemFromGroup(int groupId, int itemId); + void removeEntry(int entryId); + bool removeEntry(const QString &entryName); + QString itemName(const CaItemModel &model, int row); + void terminatServer(); + +#ifdef Q_OS_SYMBIAN + RThread iThread; +#endif //Q_OS_SYMBIAN + +private: + QSharedPointer mService; +}; + + +#endif//T_CACLIENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/inc/t_caclientnotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/inc/t_caclientnotifier.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,76 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +#ifndef T_CACLIENTNOTIFIER_H +#define T_CACLIENTNOTIFIER_H + +#include +#include +#include "cadefs.h" + +class CaEntry; +class CaNotifierFilter; +class CaNotifier; +class CaService; + +/** + * @test Test class for hsmcsserviceprovider library. + */ +class TestCaClientNotifier : public QObject +{ + Q_OBJECT + +public: + + TestCaClientNotifier(); + TestCaClientNotifier(const CaService &service, CaNotifierFilter *filter = 0); + ~TestCaClientNotifier(); + + CaNotifier *getNotifier() const; + CaNotifierFilter *getFilter() const; + void clean(); + +public slots: + + void entryChanged(int entryId, ChangeType changeType); + void entryChanged(const CaEntry &entry, ChangeType changeType); + void entryTouched(int id); + void groupContentChanged(int groupId); + +public: + + int mEntryId; + int mGroupId; + ChangeType mChangeType; + CaEntry *mEntry; + + int mCount; + QList *mEntryIds; + QList *mGroupIds; + QList *mChangeTypes; + QList *mEntries; + + CaNotifierFilter *mFilter; + CaNotifier *mNotifier; + +private: + + Q_DISABLE_COPY(TestCaClientNotifier) + +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_caclient_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\sis\rd.cer -key ..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_backupnotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_backupnotifier.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,71 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" +#include +#include + +#ifdef Q_OS_SYMBIAN +//s60 +#include +//#include <> +#include +#include + +#include "t_caclient.h" +#include "cabackupnotifier.h" +#include "castorageproxy.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCreateBackupNotifier() +{ + QScopedPointer proxy( CCaStorageProxy::NewL() ) ; + QScopedPointer notifier( CCaBackupNotifier::NewL( proxy.data() ) ); + + QVERIFY( notifier ); + +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestBackupNotifierRunL() +{ + QScopedPointer proxy( CCaStorageProxy::NewL() ); + QScopedPointer notifier( CCaBackupNotifier::NewL( proxy.data() ) ); + + TUid KUidMyCat={0x101aaaa6}; + RProperty::Define(KUidMyCat, 0, RProperty::EInt, 0); + + notifier->Cancel(); + notifier->iProperty.Attach(KUidMyCat,0); + notifier->iStatus = KRequestPending; + notifier->iProperty.Subscribe(notifier->iStatus); + notifier->SetActive(); + + RProperty::Set(KUidMyCat, 0, conn::EBURRestorePartial); + QTest::qWait(5000); + + QVERIFY( notifier->iLastState == CCaBackupNotifier::ECaRestore ); + +} + + +#endif //Q_OS_SYMBIAN diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_createupdate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_createupdate.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,402 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCreateItem() +{ + { + const CaEntry constItem; + QCOMPARE(constItem.role(), ItemEntryRole); + + //create item + //check if proper entry returned + CaEntry item; + item.setText("testName"); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + item.setDescription("description"); + CaIconDescription iconDescription; + iconDescription.setFilename("iconFileName"); + iconDescription.setSkinId("iconSkinId"); + iconDescription.setApplicationId("268458321"); + + item.setIconDescription(iconDescription); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem = service->createEntry(item); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(!resultItem.isNull()); + QCOMPARE(resultItem->role(), ItemEntryRole); + QCOMPARE(item.text(),resultItem->text()); + QCOMPARE(item.description(),resultItem->description()); + QCOMPARE(item.entryTypeName(),resultItem->entryTypeName()); + QCOMPARE(QString("attrVal1"),resultItem->attribute("attrName1")); + QCOMPARE(item.flags(),resultItem->flags()); + int itId =item.id(); + int resItId =resultItem->id(); + QVERIFY(itId != resItId); + QCOMPARE(iconDescription.filename(),resultItem->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),resultItem->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),resultItem->iconDescription().applicationId()); + + // entry from storage + QSharedPointer storageItem1 = service->getEntry(resultItem->id()); + QVERIFY(storageItem1); + QCOMPARE(QString("testName"),storageItem1->text()); + QCOMPARE(QString("description"),storageItem1->description()); + QCOMPARE(QString("test"),storageItem1->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1")); + EntryFlags flags = item.flags(); + EntryFlags storageFlags = storageItem1->flags(); + QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId()); + QVERIFY(storageItem1->iconDescription().id() > 0); + + QCOMPARE(flags ,storageFlags); + + //Cleanup + service->removeEntry(*resultItem); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCreateItemNotAllParams() +{ + { + //create item + //check if proper entry returned + CaEntry item; + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem1 = service->createEntry(item); + QVERIFY(resultItem1.isNull()); + QVERIFY(service->lastError() != NoErrorCode); + item.setText("text"); + QSharedPointer resultItem2 = service->createEntry(item); + QVERIFY(resultItem2.isNull()); + QVERIFY(service->lastError() != NoErrorCode); + item.setEntryTypeName("type"); + item.setText(""); + QSharedPointer resultItem3 = service->createEntry(item); + QVERIFY(resultItem3.isNull()); + QVERIFY(service->lastError() != NoErrorCode); + item.setText("text"); + QSharedPointer resultItem4 = service->createEntry(item); + QVERIFY(!resultItem4.isNull()); + QCOMPARE(service->lastError() , NoErrorCode); + + //Cleanup + service->removeEntry(*resultItem4); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCreateGroup() +{ + { + const CaEntry constGroup(GroupEntryRole); + QCOMPARE(constGroup.role(), GroupEntryRole); + + //create group + //check if proper entry returned + CaEntry group(GroupEntryRole); + group.setText("testName"); + group.setAttribute("attrName1", "attrVal1"); + group.setEntryTypeName("test"); + group.setFlags(RemovableEntryFlag); + CaIconDescription iconDescription; + iconDescription.setFilename("iconFileName"); + iconDescription.setSkinId("iconSkinId"); + iconDescription.setApplicationId("268458321"); + group.setIconDescription(iconDescription); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultGroup = service->createEntry(group); + QCOMPARE(service->lastError(), NoErrorCode); + + QVERIFY(!resultGroup.isNull()); + QCOMPARE(resultGroup->role(), GroupEntryRole); + + QCOMPARE(group.text(),resultGroup->text()); + QCOMPARE(group.entryTypeName(),resultGroup->entryTypeName()); + QCOMPARE(QString("attrVal1"),resultGroup->attribute("attrName1")); + QCOMPARE(group.flags(),resultGroup->flags()); + QVERIFY(group.id() != resultGroup->id()); + QCOMPARE(iconDescription.filename(),resultGroup->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),resultGroup->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),resultGroup->iconDescription().applicationId()); + + // entry from storage + QSharedPointer storageGroup1 = service->getEntry(resultGroup->id()); + QVERIFY(!storageGroup1.isNull()); + QCOMPARE(QString("testName"),storageGroup1->text()); + QCOMPARE(QString("test"),storageGroup1->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageGroup1->attribute("attrName1")); + QCOMPARE(group.flags(),storageGroup1->flags()); + QCOMPARE(iconDescription.filename(),storageGroup1->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),storageGroup1->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),storageGroup1->iconDescription().applicationId()); + //Cleanup + service->removeEntry(*resultGroup); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCreateGroupNotAllParams() +{ + { + //create group + //check if proper entry returned + CaEntry group(GroupEntryRole); + QSharedPointer service = CaService::instance(); + QSharedPointer result1 = service->createEntry(group); + QVERIFY(result1.isNull()); + QVERIFY(service->lastError() != NoErrorCode); + group.setText("text"); + QSharedPointer result2 = service->createEntry(group); + QVERIFY(result2.isNull()); + QVERIFY(service->lastError() != NoErrorCode); + group.setEntryTypeName("type"); + group.setText(""); + QSharedPointer result3 = service->createEntry(group); + QVERIFY(result3.isNull()); + QVERIFY(service->lastError() != NoErrorCode); + group.setText("text"); + QSharedPointer result4 = service->createEntry(group); + QVERIFY(!result4.isNull() ); + QCOMPARE(service->lastError() , NoErrorCode); + + //Cleanup + service->removeEntry(*result4); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestUpdateItem() +{ + { + CaEntry item1; + item1.setText("testName"); + item1.setAttribute("attrName1", "attrVal1"); + item1.setEntryTypeName("test"); + item1.setFlags(RemovableEntryFlag); + CaIconDescription iconDescription1; + iconDescription1.setFilename("iconFileName"); + iconDescription1.setSkinId("iconSkinId"); + iconDescription1.setApplicationId("268458321"); //Bluetouth app UID + item1.setIconDescription(iconDescription1); + + CaIconDescription iconDescription2; + iconDescription2.setFilename("iconFileName2"); + iconDescription2.setSkinId("iconSkinId2"); + iconDescription2.setApplicationId("537001519"); //SW update app UID + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem1 = service->createEntry(item1); + QCOMPARE(service->lastError(), NoErrorCode); + + QVERIFY(!resultItem1.isNull()); + + int id1 = resultItem1->id(); + resultItem1->setText("testName2"); + resultItem1->setAttribute("attrName2", "attrVal2"); + resultItem1->setAttribute("attrName1", "attrVal2"); + resultItem1->setEntryTypeName("test2"); + resultItem1->setFlags(UninstallEntryFlag); + resultItem1->setIconDescription(iconDescription2); + + bool updateResult1 = service->updateEntry(item1); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(!updateResult1); // no id -> return false + + bool updateResult2 = service->updateEntry(*resultItem1); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(updateResult2); // id present -> true + + QSharedPointer resultItem2 = service->createEntry(*resultItem1); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(!resultItem2.isNull()); + + int id2 = resultItem2->id(); + QVERIFY(id1 != id2); //entry clone created + + QSharedPointer storageItem1 = service->getEntry(id1); + QVERIFY(!storageItem1.isNull()); + + QSharedPointer storageItem2 = service->getEntry(id2); + QVERIFY(!storageItem2.isNull()); + + // check if attributes were updated + QCOMPARE(QString("testName2"),storageItem1->text()); + QCOMPARE(QString("test2"),storageItem1->entryTypeName()); + + QCOMPARE(QString("attrVal2"),storageItem1->attribute("attrName1")); + QCOMPARE(QString("attrVal2"),storageItem1->attribute("attrName2")); + QCOMPARE(resultItem1->flags(),storageItem1->flags()); + QCOMPARE(iconDescription2.filename(),storageItem1->iconDescription().filename()); + QCOMPARE(iconDescription2.skinId(),storageItem1->iconDescription().skinId()); + QCOMPARE(iconDescription2.applicationId(),storageItem1->iconDescription().applicationId()); + // cloned item should have the same attributes + QCOMPARE(QString("testName2"),storageItem2->text()); + QCOMPARE(QString("test2"),storageItem2->entryTypeName()); + QCOMPARE(QString("attrVal2"),storageItem2->attribute("attrName1")); + QCOMPARE(QString("attrVal2"),storageItem2->attribute("attrName2")); + QCOMPARE(resultItem1->flags(),storageItem2->flags()); + + //Cleanup + service->removeEntry(id1); + service->removeEntry(id2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestUpdateGroup() +{ + { + CaEntry group1(GroupEntryRole); + group1.setText("testName"); + group1.setAttribute("attrName1", "attrVal1"); + group1.setEntryTypeName("test"); + group1.setFlags(RemovableEntryFlag); + CaIconDescription iconDescription1; + iconDescription1.setFilename("iconFileName"); + iconDescription1.setSkinId("iconSkinId"); + iconDescription1.setApplicationId("268458321"); + group1.setIconDescription(iconDescription1); + CaIconDescription iconDescription2; + iconDescription2.setFilename("iconFileName2"); + iconDescription2.setSkinId("iconSkinId2"); + iconDescription2.setApplicationId("537001519"); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultGroup1 = service->createEntry(group1); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(!resultGroup1.isNull()); + + int id1 = resultGroup1->id(); + resultGroup1->setText("testName2"); + resultGroup1->setAttribute("attrName2", "attrVal2"); + resultGroup1->setEntryTypeName("test2"); + resultGroup1->setFlags(UninstallEntryFlag); + resultGroup1->setIconDescription(iconDescription2); + + bool updateResult1 = service->updateEntry(group1); + QVERIFY(!updateResult1); // no id -> return false + QVERIFY(service->lastError() != NoErrorCode); + + + bool updateResult2 = service->updateEntry(*resultGroup1); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(updateResult2); // id present -> true + + QSharedPointer resultGroup2 = service->createEntry(*resultGroup1); + QCOMPARE(service->lastError(), NoErrorCode); + int id2 = resultGroup2->id(); + QVERIFY(id1 != id2); //entry clone created + + QSharedPointer storageGroup1 = service->getEntry(id1); + QVERIFY(!storageGroup1.isNull()); + + QSharedPointer storageGroup2 = service->getEntry(id2); + QVERIFY(!storageGroup2.isNull()); + + // check if attributes were updated + QCOMPARE(QString("testName2"),storageGroup1->text()); + QCOMPARE(QString("test2"),storageGroup1->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageGroup1->attribute("attrName1")); + QCOMPARE(QString("attrVal2"),storageGroup1->attribute("attrName2")); + QCOMPARE(resultGroup1->flags(),storageGroup1->flags()); + QCOMPARE(iconDescription2.filename(),storageGroup1->iconDescription().filename()); + QCOMPARE(iconDescription2.skinId(),storageGroup1->iconDescription().skinId()); + QCOMPARE(iconDescription2.applicationId(),storageGroup1->iconDescription().applicationId()); + // cloned item should have the same attributes + QCOMPARE(QString("testName2"),storageGroup2->text()); + QCOMPARE(QString("test2"),storageGroup2->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageGroup2->attribute("attrName1")); + QCOMPARE(QString("attrVal2"),storageGroup2->attribute("attrName2")); + QCOMPARE(resultGroup1->flags(),storageGroup2->flags()); + + //Cleanup + service->removeEntry(id1); + service->removeEntry(id2); + + } +} +//TODO: change name +void TestCaClient::TestCreateItemWhenServerWasTerminated() +{ + terminatServer(); + TestCreateItem(); + terminatServer(); + TestUpdateItem(); + terminatServer(); + TestGetEntry(); + terminatServer(); + TestGetEntriesByIds(); + terminatServer(); + TestGetEntriesByRole(); + terminatServer(); + TestGetEntriesIdsByRole(); + terminatServer(); + TestRemoveItem(); + terminatServer(); + TestInsertEntriesIntoGroup1(); + terminatServer(); + TestRemoveEntriesFromGroup1(); + terminatServer(); + TestCustomSort(); + terminatServer(); + TestAppendEntriesIntoGroup1(); + terminatServer(); + TestPrependEntryIntoGroup1(); +} + +void TestCaClient::terminatServer() +{ + TFindProcess processFinder; + processFinder.Find(_L("camenuserver*")); + TFullName caName; + while ( KErrNone == processFinder.Next( caName ) ) { + RProcess caProcess; + TInt err = caProcess.Open(caName); + if( KErrNone == err ) { + caProcess.Terminate(0); + } + caProcess.Close(); + } +} + +QTEST_MAIN(TestCaClient) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_entryquery.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_entryquery.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,508 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +#include +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" +#include "calocalizationentry.h" + +#include "camenuiconutility.h" + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestEntryGetters() +{ + { + CaIconDescription iconDesc; + iconDesc.setFilename(QString("fileName")); + iconDesc.setSkinId(QString("skinId")); + iconDesc.setApplicationId(QString("268458321")); + + CaEntry entry; + entry.setText(QString("test")); + entry.setFlags(UninstallEntryFlag); + entry.setEntryTypeName(QString("typeNameTest")); + entry.setAttribute(QString("aname"),QString("aval")); + entry.setIconDescription(iconDesc); + + QCOMPARE(entry.text(), QString("test")); + QCOMPARE(entry.flags(), UninstallEntryFlag); + QCOMPARE(entry.entryTypeName(), QString("typeNameTest")); + QCOMPARE(entry.attribute(QString("aname")), QString("aval")); + QCOMPARE(entry.iconDescription().filename(), QString("fileName")); + QCOMPARE(entry.iconDescription().skinId(), QString("skinId")); + QCOMPARE(entry.iconDescription().applicationId(), QString("268458321")); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestEntryAssignmentOperator() +{ + { + CaIconDescription iconDesc; + iconDesc.setFilename(QString("fileName")); + iconDesc.setSkinId(QString("skinId")); + iconDesc.setApplicationId(QString("268458321")); + + CaEntry entry; + entry.setText(QString("test")); + entry.setFlags(UninstallEntryFlag); + entry.setEntryTypeName(QString("typeNameTest")); + entry.setAttribute(QString("aname"),QString("aval")); + entry.setIconDescription(iconDesc); + + CaEntry copied(entry); + CaEntry assigned; + assigned = entry; + + QCOMPARE(copied.text(), QString("test")); + QCOMPARE(copied.flags(), UninstallEntryFlag); + QCOMPARE(copied.entryTypeName(), QString("typeNameTest")); + QCOMPARE(copied.attribute(QString("aname")), QString("aval")); + QCOMPARE(copied.iconDescription().filename(), QString("fileName")); + QCOMPARE(copied.iconDescription().skinId(), QString("skinId")); + QCOMPARE(copied.iconDescription().applicationId(), QString("268458321")); + + + QCOMPARE(assigned.text(), QString("test")); + QCOMPARE(assigned.flags(), UninstallEntryFlag); + QCOMPARE(assigned.entryTypeName(), QString("typeNameTest")); + QCOMPARE(assigned.attribute(QString("aname")), QString("aval")); + QCOMPARE(assigned.iconDescription().filename(), QString("fileName")); + QCOMPARE(assigned.iconDescription().skinId(), QString("skinId")); + QCOMPARE(assigned.iconDescription().applicationId(), QString("268458321")); + + CaEntry group(GroupEntryRole); + group.setText(QString("test")); + group.setFlags(UninstallEntryFlag); + group.setEntryTypeName(QString("typeNameTest")); + group.setAttribute(QString("aname"),QString("aval")); + group.setIconDescription(iconDesc); + + CaEntry copiedG(group); + CaEntry assignedG(GroupEntryRole); + assignedG = group; + + QCOMPARE(copiedG.text(), QString("test")); + QCOMPARE(copiedG.flags(), UninstallEntryFlag); + QCOMPARE(copiedG.entryTypeName(), QString("typeNameTest")); + QCOMPARE(copiedG.attribute(QString("aname")), QString("aval")); + QCOMPARE(copiedG.iconDescription().filename(), QString("fileName")); + QCOMPARE(copiedG.iconDescription().skinId(), QString("skinId")); + QCOMPARE(copiedG.iconDescription().applicationId(), QString("268458321")); + + QCOMPARE(assignedG.text(), QString("test")); + QCOMPARE(assignedG.flags(), UninstallEntryFlag); + QCOMPARE(assignedG.entryTypeName(), QString("typeNameTest")); + QCOMPARE(assignedG.attribute(QString("aname")), QString("aval")); + QCOMPARE(assignedG.iconDescription().filename(), QString("fileName")); + QCOMPARE(assignedG.iconDescription().skinId(), QString("skinId")); + QCOMPARE(assignedG.iconDescription().applicationId(), QString("268458321")); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestQueryGetters() +{ + { + CaQuery query; + query.setEntryRoles(ItemEntryRole); + QStringList typenames; + typenames << QString("typename1"); + query.setEntryTypeNames(typenames); + query.addEntryTypeName(QString("typename2")); + query.setFlagsOn(UninstallEntryFlag); + query.setFlagsOff(RemovableEntryFlag); + query.setParentId(7777); + query.setChildId(1111); + query.setSort(MostUsedSortAttribute, Qt::AscendingOrder); + query.setCount(67); + + QCOMPARE(query.entryRoles(), ItemEntryRole); + QCOMPARE(query.parentId(), 7777); + QCOMPARE(query.childId(), 1111); + QCOMPARE(query.count(), uint(67)); + QCOMPARE(query.entryTypeNames().count(), 2); + QCOMPARE(query.entryTypeNames().at(0), QString("typename1")); + QCOMPARE(query.entryTypeNames().at(1), QString("typename2")); + QCOMPARE(query.flagsOn(), UninstallEntryFlag); + QCOMPARE(query.flagsOff(), RemovableEntryFlag); + SortAttribute srtAttr; + Qt::SortOrder srtOrd; + query.getSort(srtAttr,srtOrd); + QCOMPARE(srtAttr, MostUsedSortAttribute); + QCOMPARE(srtOrd, Qt::AscendingOrder); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestQueryClear() +{ + { + CaQuery query; + query.setEntryRoles(ItemEntryRole); + QStringList typenames; + typenames << QString("typename1"); + query.setEntryTypeNames(typenames); + query.addEntryTypeName(QString("typename2")); + query.setFlagsOn(UninstallEntryFlag); + query.setFlagsOff(RemovableEntryFlag); + query.setParentId(7777); + query.setChildId(1111); + query.setSort(MostUsedSortAttribute, Qt::DescendingOrder); + query.setCount(67); + + query.clear(); + + QCOMPARE(query.entryRoles(), ItemEntryRole|GroupEntryRole); + QCOMPARE(query.parentId(), 0); + QCOMPARE(query.childId(), 0); + QCOMPARE(query.count(), uint(0)); + QCOMPARE(query.entryTypeNames().count(), 0); + QCOMPARE(query.flagsOn(), EntryFlags()); + QCOMPARE(query.flagsOff(), EntryFlags()); + SortAttribute srtAttr; + Qt::SortOrder srtOrd; + query.getSort(srtAttr,srtOrd); + QCOMPARE(srtAttr, DefaultSortAttribute); + QCOMPARE(srtOrd, Qt::AscendingOrder); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestQueryRemove() +{ + CaQuery query; + QString native("native"); + QString zero("0"); + query.setAttribute(native, zero); + QCOMPARE(query.attribute(native), zero); + query.removeAttribute(native); + QCOMPARE(query.attribute(native), QString()); +} + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestQueryAssignmentOperator() +{ + { + CaQuery query; + query.setEntryRoles(ItemEntryRole); + QStringList typenames; + typenames << QString("typename1"); + query.setEntryTypeNames(typenames); + query.addEntryTypeName(QString("typename2")); + query.setFlagsOn(UninstallEntryFlag); + query.setFlagsOff(RemovableEntryFlag); + query.setParentId(7777); + query.setChildId(1111); + query.setSort(MostUsedSortAttribute, Qt::DescendingOrder); + query.setCount(67); + + CaQuery copied(query); + CaQuery assigned; + assigned = query; + + QCOMPARE(copied.entryRoles(), ItemEntryRole); + QCOMPARE(copied.parentId(), 7777); + QCOMPARE(copied.childId(), 1111); + QCOMPARE(copied.count(), uint(67)); + QCOMPARE(copied.entryTypeNames().count(), 2); + QCOMPARE(copied.entryTypeNames().at(0), QString("typename1")); + QCOMPARE(copied.entryTypeNames().at(1), QString("typename2")); + QCOMPARE(copied.flagsOn(), UninstallEntryFlag); + QCOMPARE(copied.flagsOff(), RemovableEntryFlag); + SortAttribute srtAttr; + Qt::SortOrder srtOrd; + copied.getSort(srtAttr,srtOrd); + QCOMPARE(srtAttr, MostUsedSortAttribute); + QCOMPARE(srtOrd, Qt::DescendingOrder); + + QCOMPARE(assigned.entryRoles(), ItemEntryRole); + QCOMPARE(assigned.parentId(), 7777); + QCOMPARE(assigned.childId(), 1111); + QCOMPARE(assigned.count(), uint(67)); + QCOMPARE(assigned.entryTypeNames().count(), 2); + QCOMPARE(assigned.entryTypeNames().at(0), QString("typename1")); + QCOMPARE(assigned.entryTypeNames().at(1), QString("typename2")); + QCOMPARE(assigned.flagsOn(), UninstallEntryFlag); + QCOMPARE(assigned.flagsOff(), RemovableEntryFlag); + assigned.getSort(srtAttr,srtOrd); + QCOMPARE(srtAttr, MostUsedSortAttribute); + QCOMPARE(srtOrd, Qt::DescendingOrder); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestMakeDefaultCollectionIcon() +{ + { + CaEntry entry; + entry.setText(QString("text")); + entry.setEntryTypeName(QString("collection")); + CaIconDescription iconDesc;// fake icon -> default should be fetched + iconDesc.setFilename(QString("fake")); + iconDesc.setSkinId(QString("fake")); + iconDesc.setApplicationId(QString("1234056789")); + entry.setIconDescription(iconDesc); + HbIcon icon = entry.makeIcon(); + QVERIFY(icon.height() > 0); + QVERIFY(icon.width() > 0); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestMakeDefaultApplicationIcon() +{ + { + CaEntry entry; + entry.setText(QString("text")); + entry.setEntryTypeName(QString("application")); + CaIconDescription iconDesc;// fake icon -> default should be fetched + iconDesc.setFilename(QString("fake")); + iconDesc.setSkinId(QString("fake")); + iconDesc.setApplicationId(QString("1234056789")); + entry.setIconDescription(iconDesc); + HbIcon icon = entry.makeIcon(); + QVERIFY(icon.height() > 0); + QVERIFY(icon.width() > 0); + } +} + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestMakeNotNativeApplicationIcon() +{ + { + CaEntry entry; + entry.setText(QString("text")); + entry.setEntryTypeName(QString("application")); + entry.setAttribute(QString("native"), QString("0")); + HbIcon icon = entry.makeIcon(); + QVERIFY(icon.height() > 0); + QVERIFY(icon.width() > 0); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestMakeExistingIcon() +{ + { + CaEntry entry; + entry.setText(QString("text")); + entry.setEntryTypeName(QString("type")); + CaIconDescription iconDesc;// fake icon -> default should be fetched + iconDesc.setSkinId(QString("qtg_large_applications_user")); + entry.setIconDescription(iconDesc); + HbIcon icon = entry.makeIcon(); + QVERIFY(icon.height() > 0); + QVERIFY(icon.width() > 0); + + //tapplication + CaEntry entry2; + entry2.setText(QString("text2")); + entry2.setEntryTypeName(QString("templatedApplication")); + CaIconDescription iconDesc2;// fake icon -> default should be fetched + iconDesc2.setApplicationId(QString("537001519")); // bluetouth + entry2.setIconDescription(iconDesc2); + HbIcon icon2 = entry2.makeIcon(); + QVERIFY(icon2.height() > 0); + QVERIFY(icon2.width() > 0); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestMakeNotExistingIcon() +{ + { + CaEntry entry; + entry.setText(QString("text")); + entry.setEntryTypeName(QString("type")); + CaIconDescription iconDesc;// fake icon + iconDesc.setFilename(QString("z:/resource/apps/fake.mif")); + entry.setIconDescription(iconDesc); + HbIcon icon = entry.makeIcon(); + QVERIFY(icon.height() < 0); + QVERIFY(icon.width() < 0); + + CaEntry entry2; + entry2.setText(QString("text2")); + entry2.setEntryTypeName(QString("type")); + CaIconDescription iconDesc2;// fake icon + iconDesc2.setFilename(QString("aaaa")); + entry2.setIconDescription(iconDesc2); + HbIcon icon2 = entry2.makeIcon(); + QVERIFY(icon2.height() < 0); + QVERIFY(icon2.width() < 0); + + CaEntry entry3; + entry3.setId(9999); //to avoid cache + entry3.setText(QString("text3")); + entry3.setEntryTypeName(QString("type")); + CaIconDescription iconDesc3;// fake icon + iconDesc3.setSkinId(QString("z:/resource/apps/fake_notcached.mif")); + entry3.setIconDescription(iconDesc3); + HbIcon icon3 = entry3.makeIcon(); + QVERIFY(icon3.height() < 0); + QVERIFY(icon3.width() < 0); + + CaEntry entry4; + entry4.setId(1000); //to avoid cache + entry4.setText(QString("text4")); + entry4.setEntryTypeName(QString("type")); + CaIconDescription iconDesc4;// fake icon + iconDesc4.setSkinId(QString("aaaa")); + entry4.setIconDescription(iconDesc4); + HbIcon icon4 = entry4.makeIcon(); + QVERIFY(icon4.height() < 0); + QVERIFY(icon4.width() < 0); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntryIcon() +{ + { + CaEntry entry; + entry.setEntryTypeName(QString("application")); + QSizeF size(50,50); + + HbIcon icon = CaMenuIconUtility::getEntryIcon(entry, size); + QVERIFY(icon.size().isValid()); + QVERIFY(icon.height() > 0); + QVERIFY(icon.width() > 0); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetApplicationIcon() +{ + { + int uid = 270495019; // contest mbm icon + QSizeF size(50,50); + + HbIcon icon = CaMenuIconUtility::getApplicationIcon(uid,size); + + QVERIFY(icon.size().isValid()); + QVERIFY(icon.height() > 0); + QVERIFY(icon.width() > 0); + + int uid2 = 537006483; // AknConf mif icon + HbIcon icon2 = CaMenuIconUtility::getApplicationIcon(uid2,size); + QVERIFY(icon2.size().isValid()); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetIconFromEntry() +{ + { + CaEntry entry; + entry.setEntryTypeName(QString("application")); + entry.iconDescription().setFilename(QString("qtg_large_applications_download")); + QSizeF size(50,50); + HbIcon icon = CaMenuIconUtility::getEntryIcon(entry,size); + QVERIFY(icon.size().isValid()); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetIconFromApparc() +{ + { + CaEntry entry; + entry.setEntryTypeName(QString("application")); + int uid = 270495019; // contest mbm icon + QSizeF size(50,50); + HbIcon icon = CaMenuIconUtility::getApplicationIcon(uid,size); + + QVERIFY(icon.size().isValid()); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetDefaultIcon() +{ + { + CaEntry entry; + entry.setText(QString("text")); + entry.setEntryTypeName(QString("application")); + CaIconDescription iconDesc;// fake icon -> default should be fetched + iconDesc.setFilename(QString("fake")); + iconDesc.setSkinId(QString("fake")); + + entry.setIconDescription(iconDesc); + HbIcon icon = CaMenuIconUtility::getEntryIcon(entry); + QVERIFY(icon.size().isValid()); + + entry.setEntryTypeName(QString("collection")); + HbIcon icon2 = CaMenuIconUtility::getEntryIcon(entry); + QVERIFY(icon2.size().isValid()); + + entry.setEntryTypeName(QString("url")); + HbIcon icon3 = CaMenuIconUtility::getEntryIcon(entry); + QVERIFY(icon3.size().isValid()); + + entry.setEntryTypeName(QString("widget")); + HbIcon icon4 = CaMenuIconUtility::getEntryIcon(entry); + QVERIFY(icon4.size().isValid()); + + entry.setEntryTypeName(QString("templatedApplication")); + HbIcon icon5 = CaMenuIconUtility::getEntryIcon(entry); + QVERIFY(icon5.size().isValid()); + + entry.setEntryTypeName(QString("package")); + HbIcon icon6 = CaMenuIconUtility::getEntryIcon(entry); + QVERIFY(icon6.size().isValid()); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_executecommand.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_executecommand.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,132 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" + +#ifdef Q_OS_SYMBIAN +//s60 +#include +//#include <> +#include +#include + +#include "t_cainstaller.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestExecuteCommandOpen() +{ + { + QSharedPointer service = CaService::instance(); + QSharedPointer entry; + CaQuery query; + query.setEntryRoles(ItemEntryRole); + QList< QSharedPointer > items = service->getEntries(query); + int itemsCount = items.count(); + QVERIFY(itemsCount >0); + for (int i=0; i< itemsCount; i++) { + QString tmp = items[i]->text(); + if (items[i]->text() == "Contacts") { + entry=items[i]; + break; + } + } + QVERIFY(entry); + bool result = service->executeCommand(entry->id(), "open") == 0; + QTest::qWait(2500); + QVERIFY2(result, "Command *open* failed"); + RWsSession session; + TInt error = session.Connect(); + TApaTaskList taskList(session); + TApaTask task = taskList.FindApp(_L("Contacts")); + QTest::qWait(250); + bool taskExists(false); + if (task.Exists()) { + taskExists = true; + task.EndTask(); + } + QTest::qWait(250); + session.Close(); + QTest::qWait(250); + QVERIFY(taskExists); + } +} + +void TestCaClient::TestExecuteCommandRemove() +{ + { + + _LIT(KAppTestFile, "c:\\testing\\data\\t_caclient\\installs\\sapiapp_S60_3_X_v_1_0_0.sisx"); + CaQuery query; + QSharedPointer service = CaService::instance(); + CaEntry *entry; + CaEntry *entryPhonebook; + QTest::qWait(250); + QStringList list("application"); + query.setEntryTypeNames(list); + query.setFlagsOn(VisibleEntryFlag); + RFs TheFs; + User::LeaveIfError(TheFs.Connect()); + + QScopedPointer installer; + QT_TRAP_THROWING(installer.reset(T_CaInstaller::NewL())); + + installer->InstallL( KAppTestFile ); + + QTest::qWait(30000); + + QList< QSharedPointer > items = service->getEntries(query); + + int itemsCountAndOne = items.count(); + + for (int i=0; i< items.count(); i++) { + QString tmp = items[i]->text(); + if (items[i]->text() == "Contacts") { + entryPhonebook=items[i].data(); + break; + } + } + + for (int i=0; i< itemsCountAndOne; i++) { + if (items[i]->text() == "sapiapp") { + entry=items[i].data(); + break; + } + } + //entry attribute will be removed by appscanner + //after "sapiapp" entry is removed + entryPhonebook->setAttribute("mmc_id","0x12345678"); + service->updateEntry(*entryPhonebook); + bool result = false; + if (entry->id() > 0) { + result = service->executeCommand(entry->id(), "remove") == 0; + } + QVERIFY2(result, "Remove command returns false"); + QTest::qWait(40000); + + QList< QSharedPointer > itemsNew = service->getEntries(query); + int itemsCount = itemsNew.count(); + + QVERIFY2(itemsCountAndOne == itemsCount +1 , "Remove unsuccessful"); + + } +} + + +#endif //Q_OS_SYMBIAN diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_getentries.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_getentries.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,3129 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntry() +{ + { + CaEntry item; + item.setText("testName"); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + + CaIconDescription iconDescription; + iconDescription.setFilename("iconFileName"); + iconDescription.setSkinId("iconSkinId"); + iconDescription.setApplicationId("268458321"); + item.setIconDescription(iconDescription); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem = service->createEntry(item); + + QVERIFY(!resultItem.isNull()); + // entry from storage + QSharedPointer storageItem1 = service->getEntry(resultItem->id()); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(storageItem1); + QCOMPARE(storageItem1->role(), ItemEntryRole); + QCOMPARE(QString("testName"),storageItem1->text()); + QCOMPARE(QString("test"),storageItem1->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1")); + QCOMPARE(item.flags(),storageItem1->flags()); + QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId()); + QSharedPointer storageItem2 = service->getEntry(9999); + QVERIFY(service->lastError() != NoErrorCode); + QVERIFY(!storageItem2); + + //Cleanup + service->removeEntry(*resultItem); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByIds() +{ + { + CaEntry item; + item.setText("testName1"); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem1 = service->createEntry(item); + item.setText("testName2"); + QSharedPointer resultItem2 = service->createEntry(item); + item.setText("testName3"); + QSharedPointer resultItem3 = service->createEntry(item); + QVERIFY(!resultItem1.isNull()); + QVERIFY(!resultItem2.isNull()); + QVERIFY(!resultItem3.isNull()); + + QList ids; + ids.append(resultItem1->id()); + ids.append(resultItem3->id()); + ids.append(resultItem2->id()); + + QList< QSharedPointer > entries = service->getEntries(ids) ; + QCOMPARE(entries.count(), 3); + QCOMPARE(service->lastError(), NoErrorCode); + + QVERIFY(entries.at(0)); + QCOMPARE(entries.at(0)->role(), ItemEntryRole); + QCOMPARE(QString("testName1"),entries.at(0)->text()); + QCOMPARE(QString("test"),entries.at(0)->entryTypeName()); + QCOMPARE(QString("attrVal1"),entries.at(0)->attribute("attrName1")); + QCOMPARE(item.flags(),entries.at(0)->flags()); + QVERIFY(entries.at(1)); + QCOMPARE(entries.at(1)->role(), ItemEntryRole); + QCOMPARE(QString("testName3"),entries.at(1)->text()); + QCOMPARE(QString("test"),entries.at(1)->entryTypeName()); + QCOMPARE(QString("attrVal1"),entries.at(1)->attribute("attrName1")); + QCOMPARE(item.flags(),entries.at(1)->flags()); + QVERIFY(entries.at(2)); + QCOMPARE(entries.at(2)->role(), ItemEntryRole); + QCOMPARE(QString("testName2"),entries.at(2)->text()); + QCOMPARE(QString("test"),entries.at(2)->entryTypeName()); + QCOMPARE(QString("attrVal1"),entries.at(2)->attribute("attrName1")); + QCOMPARE(item.flags(),entries.at(2)->flags()); + + QCOMPARE(entries.at(0)->id(),resultItem1->id()); + QCOMPARE(entries.at(1)->id(),resultItem3->id()); + QCOMPARE(entries.at(2)->id(),resultItem2->id()); + + QList ids2; + ids2.append(resultItem1->id()); + ids2.append(9999); + + QList< QSharedPointer > entries2 = service->getEntries(ids2) ; + QCOMPARE(entries2.count(), 1); + QVERIFY(service->lastError() != NoErrorCode); + + //Cleanup + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRole() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query; + query.setEntryRoles(ItemEntryRole); + QList< QSharedPointer > items = service->getEntries(query); + int itemsCountBefore = items.count(); + query.setEntryRoles(GroupEntryRole); + QList > groups = service->getEntries(query); + int groupsCountBefore = groups.count(); + query.setEntryRoles(ItemEntryRole | GroupEntryRole); + QList > itemsOrGroups = service->getEntries(query); + int itemsOrGroupsCountBefore = itemsOrGroups.count(); + + + //ADD TO STORAGE + CaEntry item; + item.setText("testName_item"); + item.setAttribute("attrName1_item", "attrVal1_item"); + item.setEntryTypeName("test_item"); + item.setFlags(RemovableEntryFlag); + CaEntry group(GroupEntryRole); + group.setText("testName_group"); + group.setAttribute("attrName1_group", "attrVal1_group"); + group.setEntryTypeName("test_group"); + group.setFlags(RemovableEntryFlag); + + QSharedPointer resultEntry1 = service->createEntry(item); + QSharedPointer resultEntry2 = service->createEntry(group); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET RESULTS AFTER ADD + query.setEntryRoles(ItemEntryRole); + items = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + + int itemsCountAfter = items.count(); + query.setEntryRoles(GroupEntryRole); + groups = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + + int groupsCountAfter = groups.count(); + query.setEntryRoles(ItemEntryRole | GroupEntryRole); + itemsOrGroups = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + int itemsOrGroupsCountAfter = itemsOrGroups.count(); + + //CHECK RESULTS + QCOMPARE(itemsCountAfter, itemsCountBefore+1); + QCOMPARE(groupsCountAfter, groupsCountBefore+1); + QCOMPARE(itemsOrGroupsCountAfter, itemsOrGroupsCountBefore+2); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByParent() +{ + { + //ADD TEST DATA TO THE STORAGE + QSharedPointer service = CaService::instance(); + CaEntry group(GroupEntryRole); + group.setText("testName_group"); + group.setAttribute("attrName1_group", "attrVal1_group"); + group.setEntryTypeName("test_group"); + group.setFlags(RemovableEntryFlag); + QSharedPointer parentEntry = service->createEntry(group); + + QVERIFY(!parentEntry.isNull()); + CaEntry item; + item.setText("testName_item"); + item.setAttribute("attrName1_item", "attrVal1_item"); + item.setEntryTypeName("test_item"); + item.setFlags(RemovableEntryFlag); + QSharedPointer childEntry = service->createEntry(item); + + QVERIFY(!childEntry.isNull()); + + //PREPARE QUERY + CaQuery query; + query.setParentId(parentEntry->id()); + QList< QSharedPointer > entries = service->getEntries(query); + + int countBefore = entries.count(); + + //APPEND ENTRY TO THE GROUP + service->appendEntryToGroup(parentEntry->id(),childEntry->id()); + entries = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + + int countAfter = entries.count(); + + //CHECK RESULTS + QCOMPARE(countBefore, 0); + QCOMPARE(countAfter, 1); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*parentEntry); + service->removeEntry(*childEntry); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByType1() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query; + QStringList strList; + strList << QString("WRONGTYPENAME"); + query.setEntryTypeNames(strList); + QList< QSharedPointer > entriesWrongType = service->getEntries(query); + int countWrongBefore = entriesWrongType.count(); + strList.clear(); + strList << QString("WRONGTYPENAME"); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + QList< QSharedPointer > entriesWrong12 = service->getEntries(query); + int countWrong12Before = entriesWrong12.count(); + strList.clear(); + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + QList< QSharedPointer > entries1 = service->getEntries(query); + int count1Before = entries1.count(); + strList.clear(); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + QList< QSharedPointer > entries2 = service->getEntries(query); + int count2Before = entries2.count(); + strList.clear(); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + QList< QSharedPointer > entries12 = service->getEntries(query); + int count12Before = entries12.count(); + + //ADD TEST DATA TO THE STORAGE + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET STATE FROM THE STORAGE AFTER ADD + strList.clear(); + strList << QString("WRONGTYPENAME"); + query.setEntryTypeNames(strList); + query.setEntryTypeNames(strList); + entriesWrongType = service->getEntries(query); + int countWrongAfter = entriesWrongType.count(); + strList.clear(); + strList << QString("WRONGTYPENAME"); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + entriesWrong12 = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + int countWrong12After = entriesWrong12.count(); + strList.clear(); + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + entries1 = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + int count1After = entries1.count(); + strList.clear(); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + entries2 = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + int count2After = entries2.count(); + strList.clear(); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + entries12 = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + int count12After = entries12.count(); + + //CHECK RESULTS + QCOMPARE(countWrongBefore,countWrongAfter); + QCOMPARE(countWrong12Before+2,countWrong12After); + QCOMPARE(count1Before+1,count1After); + QCOMPARE(count2Before+1,count2After); + QCOMPARE(count12Before+2,count12After); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByType2() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query; + QStringList strList; + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + query.addEntryTypeName(QString("test_item2")); + QList< QSharedPointer > entries12 = service->getEntries(query); + int count12Before = entries12.count(); + + //ADD TEST DATA TO THE STORAGE + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET STATE FROM THE STORAGE AFTER ADD + strList.clear(); + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + query.addEntryTypeName(QString("test_item2")); + entries12 = service->getEntries(query); + QCOMPARE(service->lastError(), NoErrorCode); + int count12After = entries12.count(); + + //CHECK RESULTS + QCOMPARE(count12Before+2,count12After); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByFlagsOn() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setFlagsOn(UninstallEntryFlag); + CaQuery query2; + query2.setFlagsOn(RemovableEntryFlag); + CaQuery query3; + query3.setFlagsOn(UninstallEntryFlag|RemovableEntryFlag); + QList< QSharedPointer > entriesSystem = service->getEntries(query1); + int systemCountBefore = entriesSystem.count(); + QList< QSharedPointer > entriesRemovable = service->getEntries(query2); + int removableCountBefore = entriesRemovable.count(); + QList< QSharedPointer > entriesSysRem = service->getEntries(query3); + int sysremoveCountBefore = entriesSysRem.count(); + //ADD TO DB + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + item1.setFlags(UninstallEntryFlag); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + item2.setFlags(UninstallEntryFlag | RemovableEntryFlag); + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + //CHECK STATE IN THE STORAGE AFTER ADD + entriesSystem = service->getEntries(query1); + int systemCountAfter = entriesSystem.count(); + QCOMPARE(service->lastError(), NoErrorCode); + entriesRemovable = service->getEntries(query2); + QCOMPARE(service->lastError(), NoErrorCode); + int removableCountAfter = entriesRemovable.count(); + entriesSysRem = service->getEntries(query3); + QCOMPARE(service->lastError(), NoErrorCode); + int sysremoveCountAfter = entriesSysRem.count(); + //CHECK RESULTS + QCOMPARE(systemCountBefore+2,systemCountAfter); + QCOMPARE(removableCountBefore+1,removableCountAfter); + QCOMPARE(sysremoveCountBefore+1,sysremoveCountAfter); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByFlagsOff() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setFlagsOff(UninstallEntryFlag); + CaQuery query2; + query2.setFlagsOff(RemovableEntryFlag); + CaQuery query3; + query3.setFlagsOff(UninstallEntryFlag|RemovableEntryFlag); + QList< QSharedPointer > entriesSystem = service->getEntries(query1); + int systemCountBefore = entriesSystem.count(); + QList< QSharedPointer > entriesRemovable = service->getEntries(query2); + int removableCountBefore = entriesRemovable.count(); + QList< QSharedPointer > entriesSysRem = service->getEntries(query3); + int sysremoveCountBefore = entriesSysRem.count(); + //ADD TO DB + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + item1.setFlags(UninstallEntryFlag); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + item2.setFlags(RemovableEntryFlag); + + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET STATE FROM THE STORAGE AFTER ADD + entriesSystem = service->getEntries(query1); + int systemCountAfter = entriesSystem.count(); + entriesRemovable = service->getEntries(query2); + int removableCountAfter = entriesRemovable.count(); + entriesSysRem = service->getEntries(query3); + int sysremoveCountAfter = entriesSysRem.count(); + //CHECK RESULTS + QCOMPARE(systemCountBefore+1,systemCountAfter); + QCOMPARE(removableCountBefore+1,removableCountAfter); + QCOMPARE(sysremoveCountBefore,sysremoveCountAfter); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByFlagsOnOff() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setFlagsOn(UninstallEntryFlag); + query1.setFlagsOff(RemovableEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + //ADD TO DB + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultEntry1 = service->createEntry(item1); + QVERIFY(!resultEntry1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB + CaEntry item2; + item2.setText("testName_item1"); + item2.setAttribute("attrName1_item", "attrVal1_item"); + item2.setEntryTypeName("test_item1"); + item2.setFlags(RemovableEntryFlag); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB + CaEntry item3; + item3.setText("testName_item1"); + item3.setAttribute("attrName1_item", "attrVal1_item"); + item3.setEntryTypeName("test_item1"); + item3.setFlags(UninstallEntryFlag|RemovableEntryFlag); + QSharedPointer resultEntry3 = service->createEntry(item3); + QVERIFY(!resultEntry3.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3,entriesCount4); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + service->removeEntry(*resultEntry3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRoleParent() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT ENTRY TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (item, parent2) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry2->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (group, parent2) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("type")); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry2->id(),resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB (item, parent1) + service->appendEntryToGroup(parentEntry->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (group, parent1) + service->appendEntryToGroup(parentEntry->id(),resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3+1, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRoleType() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.addEntryTypeName(QString("TestTypeName")); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + //ADD TO DB (item, typeOk) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TestTypeName")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (item, typeWrong) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TestTypeWRONG")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB (group, typeOk) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TestTypeName")); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (group, typeWrong) + CaEntry group2(GroupEntryRole); + group2.setText(QString("text")); + group2.setEntryTypeName(QString("TestTypeWRONG")); + QSharedPointer resultGroup2 = service->createEntry(group2); + QVERIFY(!resultGroup2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultGroup1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRoleFlags() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setFlagsOn(UninstallEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + //ADD TO DB (item, systemOn) + CaEntry item1; + item1.setFlags(UninstallEntryFlag); + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Name")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (item, systemOff) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("Name")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(group, systemOn) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("type")); + group1.setFlags(UninstallEntryFlag); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(group, systemoff) + CaEntry group2(GroupEntryRole); + group2.setText(QString("text")); + group2.setEntryTypeName(QString("type")); + QSharedPointer resultGroup2 = service->createEntry(group2); + QVERIFY(!resultGroup2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultGroup1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByParentType() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("typeOK")); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + //ADD TO DB (parent1, typeok) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("typeOK")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (parent1, typeWrong) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("typeWrong")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB (parent2, typeOk) + service->appendEntryToGroup(parentEntry2->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (parent2,typeWrong) + service->appendEntryToGroup(parentEntry2->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByParentFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setParentId(parentEntry->id()); + query1.setFlagsOn(UninstallEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (parent1, system) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (parent1, not system) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("Type")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB( parent2, system ) + service->appendEntryToGroup(parentEntry2->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (parent2, not system) + service->appendEntryToGroup(parentEntry2->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByTypeFlags() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.addEntryTypeName(QString("TypeOK")); + query1.setFlagsOn(UninstallEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (typeOk, system) + CaEntry item1; + item1.setFlags(UninstallEntryFlag); + item1.setEntryTypeName(QString("TypeOK")); + item1.setText(QString("Name")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB(typeOk, not system) + CaEntry item2; + item2.setEntryTypeName(QString("TypeOK")); + item2.setText(QString("Name")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(typeWrong, system) + CaEntry item3; + item3.setFlags(UninstallEntryFlag); + item3.setText(QString("Name")); + item3.setEntryTypeName(QString("TypeWrong")); + QSharedPointer resultItem3 = service->createEntry(item3); + QVERIFY(!resultItem3.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(typeWrong, not system) + CaEntry item4; + item4.setEntryTypeName(QString("TypeWrong")); + item4.setText(QString("Name")); + + QSharedPointer resultItem4 = service->createEntry(item4); + QVERIFY(!resultItem4.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*resultItem4); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRoleParentType() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("TypeOK")); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB ( item, parent1, typeOk) + CaEntry item1; + item1.setEntryTypeName(QString("TypeOK")); + item1.setText(QString("Name")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2= entries.count(); + //ADD TO DB ( item, parent1, typeWrong) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeWRONG")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB ( item, parent2, typeOk) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB ( group, parent1, typeOk) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRoleParentFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + query1.setFlagsOn(UninstallEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (item, parent1, system ) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB(item, parent1, not system ) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("Type")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(item, parent2 , system ) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(group, parent1, system ) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("type")); + group1.setFlags(UninstallEntryFlag); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultGroup1->id()); + + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup1); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByParentTypeFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("TypeOK")); + query1.setFlagsOn(UninstallEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (parent1, typeOk, system) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TypeOK")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB(parent1, typeOk, not system) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(parent1, typeWRONG, system) + CaEntry item3; + item3.setText(QString("Name")); + item3.setEntryTypeName(QString("TypeWRONG")); + item3.setFlags(UninstallEntryFlag); + QSharedPointer resultItem3 = service->createEntry(item3); + QVERIFY(!resultItem3.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem3->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(parent2, typeOk, system) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByRoleParentTypeFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("TypeOK")); + query1.setFlagsOn(UninstallEntryFlag); + QList< QSharedPointer > entries = service->getEntries(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB ( item, parent1, typeOK, system ) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TypeOK")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount2 = entries.count(); + //ADD TO DB ( item, parent1, typeOK, not system ) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount3 = entries.count(); + //ADD TO DB( item, parent1, typeWRONG, system ) + CaEntry item3; + item3.setText(QString("Name")); + item3.setEntryTypeName(QString("TypeWRONG")); + item3.setFlags(UninstallEntryFlag); + QSharedPointer resultItem3 = service->createEntry(item3); + QVERIFY(!resultItem3.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem3->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount4 = entries.count(); + //ADD TO DB( item, parent2, typeOK, system ) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount5 = entries.count(); + //ADD TO DB( group, parent1, typeOK, system ) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TypeOK")); + group1.setFlags(UninstallEntryFlag); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntries(query1); + int entriesCount6 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + QCOMPARE(entriesCount5, entriesCount6); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesCount() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("CountTest")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("CountTest")); + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("CountTest")); + query1.setCount(1); + CaQuery query2; + query2.addEntryTypeName(QString("CountTest")); + query2.setCount(2); + CaQuery query3; + query3.addEntryTypeName(QString("CountTest")); + query3.setCount(3); + QList< QSharedPointer > entries1 = service->getEntries(query1); + QList< QSharedPointer > entries2 = service->getEntries(query2); + QList< QSharedPointer > entries3 = service->getEntries(query3); + + //CHECK RESULTS + QCOMPARE(entries1.count(),1); + QCOMPARE(entries2.count(),2); + QCOMPARE(entries3.count(),3); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesSortCreated() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort1Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + + //ADD TO DB + CaEntry item1; + item1.setEntryTypeName(QString("Sort1Test")); + item1.setText(QString("Name")); + + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort1Test")); + query1.setSort(CreatedTimestampSortAttribute, Qt::AscendingOrder); + QList< QSharedPointer > entriesAsc = service->getEntries(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort1Test")); + query2.setSort(CreatedTimestampSortAttribute, Qt::DescendingOrder); + QList< QSharedPointer > entriesDesc = service->getEntries(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0)->id(),resultItem1->id()); + QCOMPARE(entriesAsc.at(1)->id(),resultItem2->id()); + QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(1)->id(),resultItem2->id()); + QCOMPARE(entriesDesc.at(2)->id(),resultItem1->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesSortDefault() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort0Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + + //ADD TO DB + CaEntry item1; + item1.setEntryTypeName(QString("Sort0Test")); + item1.setText(QString("Name")); + + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort0Test")); + query1.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QList< QSharedPointer > entriesAsc = service->getEntries(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort0Test")); + query2.setSort(DefaultSortAttribute, Qt::DescendingOrder); + QList< QSharedPointer > entriesDesc = service->getEntries(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0)->id(),resultItem1->id()); + QCOMPARE(entriesAsc.at(1)->id(),resultItem2->id()); + QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(1)->id(),resultItem2->id()); + QCOMPARE(entriesDesc.at(2)->id(),resultItem1->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesSortName() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort2Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("nameB")); + item1.setEntryTypeName(QString("Sort2Test")); + CaEntry item2; + item2.setText(QString("NameA")); + item2.setEntryTypeName(QString("Sort2Test")); + CaEntry item3; + item3.setText(QString("NameC")); + item3.setEntryTypeName(QString("Sort2Test")); + + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item2); + QSharedPointer resultItem3 = service->createEntry(item3); + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort2Test")); + query1.setSort(NameSortAttribute, Qt::AscendingOrder); + QList< QSharedPointer > entriesAsc = service->getEntries(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort2Test")); + query2.setSort(NameSortAttribute, Qt::DescendingOrder); + QList< QSharedPointer > entriesDesc = service->getEntries(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0)->id(),resultItem2->id()); + QCOMPARE(entriesAsc.at(1)->id(),resultItem1->id()); + QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(1)->id(),resultItem1->id()); + QCOMPARE(entriesDesc.at(2)->id(),resultItem2->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesSortLast() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort3Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setEntryTypeName(QString("Sort3Test")); + item1.setText(QString("Name")); + + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + service->touch(*resultItem2); + service->touch(*resultItem1); + service->touch(*resultItem3); + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort3Test")); + query1.setSort(LastUsedSortAttribute, Qt::AscendingOrder); + QList< QSharedPointer > entriesAsc = service->getEntries(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort3Test")); + query2.setSort(LastUsedSortAttribute, Qt::DescendingOrder); + QList< QSharedPointer > entriesDesc = service->getEntries(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0)->id(),resultItem2->id()); + QCOMPARE(entriesAsc.at(1)->id(),resultItem1->id()); + QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id()); + QCOMPARE(entriesDesc.at(1)->id(),resultItem1->id()); + QCOMPARE(entriesDesc.at(2)->id(),resultItem2->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesSortMost() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort4Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Sort4Test")); + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + service->touch(*resultItem2); + service->touch(*resultItem2); + service->touch(*resultItem2); + service->touch(*resultItem1); + service->touch(*resultItem1); + service->touch(*resultItem3); + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort4Test")); + query1.setSort(MostUsedSortAttribute, Qt::AscendingOrder); + QList< QSharedPointer > entriesAsc = service->getEntries(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort4Test")); + query2.setSort(MostUsedSortAttribute, Qt::DescendingOrder); + QList< QSharedPointer > entriesDesc = service->getEntries(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0)->id(),resultItem3->id()); + QCOMPARE(entriesAsc.at(1)->id(),resultItem1->id()); + QCOMPARE(entriesAsc.at(2)->id(),resultItem2->id()); + QCOMPARE(entriesDesc.at(0)->id(),resultItem2->id()); + QCOMPARE(entriesDesc.at(1)->id(),resultItem1->id()); + QCOMPARE(entriesDesc.at(2)->id(),resultItem3->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRole() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query; + query.setEntryRoles(ItemEntryRole); + QList items = service->getEntryIds(query); + int itemsCountBefore = items.count(); + query.setEntryRoles(GroupEntryRole); + QList groups = service->getEntryIds(query); + int groupsCountBefore = groups.count(); + query.setEntryRoles(ItemEntryRole | GroupEntryRole); + QList itemsOrGroups = service->getEntryIds(query); + int itemsOrGroupsCountBefore = itemsOrGroups.count(); + + + //ADD TO STORAGE + CaEntry item; + item.setText("testName_item"); + item.setAttribute("attrName1_item", "attrVal1_item"); + item.setEntryTypeName("test_item"); + item.setFlags(RemovableEntryFlag); + CaEntry group(GroupEntryRole); + group.setText("testName_group"); + group.setAttribute("attrName1_group", "attrVal1_group"); + group.setEntryTypeName("test_group"); + group.setFlags(RemovableEntryFlag); + + QSharedPointer resultEntry1 = service->createEntry(item); + QSharedPointer resultEntry2 = service->createEntry(group); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET RESULTS AFTER ADD + query.setEntryRoles(ItemEntryRole); + items = service->getEntryIds(query); + QCOMPARE(service->lastError(), NoErrorCode); + int itemsCountAfter = items.count(); + query.setEntryRoles(GroupEntryRole); + groups = service->getEntryIds(query); + QCOMPARE(service->lastError(), NoErrorCode); + int groupsCountAfter = groups.count(); + query.setEntryRoles(ItemEntryRole | GroupEntryRole); + itemsOrGroups = service->getEntryIds(query); + QCOMPARE(service->lastError(), NoErrorCode); + int itemsOrGroupsCountAfter = itemsOrGroups.count(); + + //CHECK RESULTS + QCOMPARE(itemsCountAfter, itemsCountBefore+1); + QCOMPARE(groupsCountAfter, groupsCountBefore+1); + QCOMPARE(itemsOrGroupsCountAfter, itemsOrGroupsCountBefore+2); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByParent() +{ + { + //ADD TEST DATA TO THE STORAGE + QSharedPointer service = CaService::instance(); + CaEntry group(GroupEntryRole); + group.setText("testName_group"); + group.setAttribute("attrName1_group", "attrVal1_group"); + group.setEntryTypeName("test_group"); + group.setFlags(RemovableEntryFlag); + QSharedPointer parentEntry = service->createEntry(group); + QVERIFY(!parentEntry.isNull()); + CaEntry item; + item.setText("testName_item"); + item.setAttribute("attrName1_item", "attrVal1_item"); + item.setEntryTypeName("test_item"); + item.setFlags(RemovableEntryFlag); + QSharedPointer childEntry = service->createEntry(item); + QVERIFY(!childEntry.isNull()); + + //PREPARE QUERY + CaQuery query; + query.setParentId(parentEntry->id()); + QList entries = service->getEntryIds(query); + int countBefore = entries.count(); + + //APPEND ENTRY TO THE GROUP + service->appendEntryToGroup(parentEntry->id(),childEntry->id()); + entries = service->getEntryIds(query); + int countAfter = entries.count(); + + //CHECK RESULTS + QCOMPARE(countBefore, 0); + QCOMPARE(countAfter, 1); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*childEntry); + service->removeEntry(*parentEntry); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByType1() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query; + QStringList strList; + strList << QString("WRONGTYPENAME"); + query.setEntryTypeNames(strList); + QList entriesWrongType = service->getEntryIds(query); + int countWrongBefore = entriesWrongType.count(); + strList.clear(); + strList << QString("WRONGTYPENAME"); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + QList entriesWrong12 = service->getEntryIds(query); + int countWrong12Before = entriesWrong12.count(); + strList.clear(); + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + QList entries1 = service->getEntryIds(query); + int count1Before = entries1.count(); + strList.clear(); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + QList entries2 = service->getEntryIds(query); + int count2Before = entries2.count(); + strList.clear(); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + QList entries12 = service->getEntryIds(query); + int count12Before = entries12.count(); + + //ADD TEST DATA TO THE STORAGE + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET STATE FROM THE STORAGE AFTER ADD + strList.clear(); + strList << QString("WRONGTYPENAME"); + query.setEntryTypeNames(strList); + query.setEntryTypeNames(strList); + entriesWrongType = service->getEntryIds(query); + int countWrongAfter = entriesWrongType.count(); + strList.clear(); + strList << QString("WRONGTYPENAME"); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + entriesWrong12 = service->getEntryIds(query); + int countWrong12After = entriesWrong12.count(); + strList.clear(); + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + entries1 = service->getEntryIds(query); + int count1After = entries1.count(); + strList.clear(); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + entries2 = service->getEntryIds(query); + int count2After = entries2.count(); + strList.clear(); + strList << QString("test_item1"); + strList << QString("test_item2"); + query.setEntryTypeNames(strList); + entries12 = service->getEntryIds(query); + int count12After = entries12.count(); + + //CHECK RESULTS + QCOMPARE(countWrongBefore,countWrongAfter); + QCOMPARE(countWrong12Before+2,countWrong12After); + QCOMPARE(count1Before+1,count1After); + QCOMPARE(count2Before+1,count2After); + QCOMPARE(count12Before+2,count12After); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByType2() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query; + QStringList strList; + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + query.addEntryTypeName(QString("test_item2")); + QList entries12 = service->getEntryIds(query); + int count12Before = entries12.count(); + + //ADD TEST DATA TO THE STORAGE + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET STATE FROM THE STORAGE AFTER ADD + strList.clear(); + strList << QString("test_item1"); + query.setEntryTypeNames(strList); + query.addEntryTypeName(QString("test_item2")); + entries12 = service->getEntryIds(query); + int count12After = entries12.count(); + + //CHECK RESULTS + QCOMPARE(count12Before+2,count12After); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByFlagsOn() +{ + { + //CHECK INITIAL STATE IN DB + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setFlagsOn(UninstallEntryFlag); + CaQuery query2; + query2.setFlagsOn(RemovableEntryFlag); + CaQuery query3; + query3.setFlagsOn(UninstallEntryFlag|RemovableEntryFlag); + QList entriesSystem = service->getEntryIds(query1); + int systemCountBefore = entriesSystem.count(); + QList entriesRemovable = service->getEntryIds(query2); + int removableCountBefore = entriesRemovable.count(); + QList entriesSysRem = service->getEntryIds(query3); + int sysremoveCountBefore = entriesSysRem.count(); + //ADD TO DB + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + item1.setFlags(UninstallEntryFlag); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + item2.setFlags(UninstallEntryFlag | RemovableEntryFlag); + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + //CHECK STATE IN THE STORAGE AFTER ADD + entriesSystem = service->getEntryIds(query1); + int systemCountAfter = entriesSystem.count(); + entriesRemovable = service->getEntryIds(query2); + int removableCountAfter = entriesRemovable.count(); + entriesSysRem = service->getEntryIds(query3); + int sysremoveCountAfter = entriesSysRem.count(); + //CHECK RESULTS + QCOMPARE(systemCountBefore+2,systemCountAfter); + QCOMPARE(removableCountBefore+1,removableCountAfter); + QCOMPARE(sysremoveCountBefore+1,sysremoveCountAfter); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByFlagsOff() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setFlagsOff(UninstallEntryFlag); + CaQuery query2; + query2.setFlagsOff(RemovableEntryFlag); + CaQuery query3; + query3.setFlagsOff(UninstallEntryFlag|RemovableEntryFlag); + QList entriesSystem = service->getEntryIds(query1); + int systemCountBefore = entriesSystem.count(); + QList entriesRemovable = service->getEntryIds(query2); + int removableCountBefore = entriesRemovable.count(); + QList entriesSysRem = service->getEntryIds(query3); + int sysremoveCountBefore = entriesSysRem.count(); + //ADD TO DB + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + item1.setFlags(UninstallEntryFlag); + CaEntry item2; + item2.setText("testName_item2"); + item2.setAttribute("attrName2_item", "attrVal2_item"); + item2.setEntryTypeName("test_item2"); + item2.setFlags(RemovableEntryFlag); + + QSharedPointer resultEntry1 = service->createEntry(item1); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry1.isNull()); + QVERIFY(!resultEntry2.isNull()); + + //GET STATE FROM THE STORAGE AFTER ADD + entriesSystem = service->getEntryIds(query1); + int systemCountAfter = entriesSystem.count(); + entriesRemovable = service->getEntryIds(query2); + int removableCountAfter = entriesRemovable.count(); + entriesSysRem = service->getEntryIds(query3); + int sysremoveCountAfter = entriesSysRem.count(); + //CHECK RESULTS + QCOMPARE(systemCountBefore+1,systemCountAfter); + QCOMPARE(removableCountBefore+1,removableCountAfter); + QCOMPARE(sysremoveCountBefore,sysremoveCountAfter); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByFlagsOnOff() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setFlagsOn(UninstallEntryFlag); + query1.setFlagsOff(RemovableEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + //ADD TO DB + CaEntry item1; + item1.setText("testName_item1"); + item1.setAttribute("attrName1_item", "attrVal1_item"); + item1.setEntryTypeName("test_item1"); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultEntry1 = service->createEntry(item1); + QVERIFY(!resultEntry1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB + CaEntry item2; + item2.setText("testName_item1"); + item2.setAttribute("attrName1_item", "attrVal1_item"); + item2.setEntryTypeName("test_item1"); + item2.setFlags(RemovableEntryFlag); + QSharedPointer resultEntry2 = service->createEntry(item2); + QVERIFY(!resultEntry2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB + CaEntry item3; + item3.setText("testName_item1"); + item3.setAttribute("attrName1_item", "attrVal1_item"); + item3.setEntryTypeName("test_item1"); + item3.setFlags(UninstallEntryFlag|RemovableEntryFlag); + QSharedPointer resultEntry3 = service->createEntry(item3); + QVERIFY(!resultEntry3.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3,entriesCount4); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultEntry1); + service->removeEntry(*resultEntry2); + service->removeEntry(*resultEntry3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRoleParent() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT ENTRY TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("TypeOK")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("TypeOK")); + + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (item, parent2) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry2->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (group, parent2) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry2->id(),resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB (item, parent1) + service->appendEntryToGroup(parentEntry->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (group, parent1) + service->appendEntryToGroup(parentEntry->id(),resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3+1, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRoleType() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.addEntryTypeName(QString("TestTypeName")); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + //ADD TO DB (item, typeOk) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TestTypeName")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (item, typeWrong) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TestTypeWRONG")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB (group, typeOk) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TestTypeName")); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (group, typeWrong) + CaEntry group2(GroupEntryRole); + group2.setText(QString("text")); + group2.setEntryTypeName(QString("TestTypeWRONG")); + QSharedPointer resultGroup2 = service->createEntry(group2); + QVERIFY(!resultGroup2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultGroup1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRoleFlags() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setFlagsOn(UninstallEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + //ADD TO DB (item, systemOn) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (item, systemOff) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("Type")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(group, systemOn) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("type")); + group1.setFlags(UninstallEntryFlag); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(group, systemoff) + CaEntry group2(GroupEntryRole); + group2.setText(QString("text")); + group2.setEntryTypeName(QString("type")); + QSharedPointer resultGroup2 = service->createEntry(group2); + QVERIFY(!resultGroup2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultGroup1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByParentType() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("typeOK")); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + //ADD TO DB (parent1, typeok) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("typeOK")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (parent1, typeWrong) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("typeWrong")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB (parent2, typeOk) + service->appendEntryToGroup(parentEntry2->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (parent2,typeWrong) + service->appendEntryToGroup(parentEntry2->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByParentFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setParentId(parentEntry->id()); + query1.setFlagsOn(UninstallEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (parent1, system) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB (parent1, not system) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("Type")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB( parent2, system ) + service->appendEntryToGroup(parentEntry2->id(),resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB (parent2, not system) + service->appendEntryToGroup(parentEntry2->id(),resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByTypeFlags() +{ + { + //GET INITIAL STATE FROM THE STORAGE + QSharedPointer service = CaService::instance(); + CaQuery query1; + query1.addEntryTypeName(QString("TypeOK")); + query1.setFlagsOn(UninstallEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (typeOk, system) + CaEntry item1; + item1.setText(QString("Name")); + item1.setFlags(UninstallEntryFlag); + item1.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB(typeOk, not system) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(typeWrong, system) + CaEntry item3; + item3.setText(QString("Name")); + item3.setFlags(UninstallEntryFlag); + item3.setEntryTypeName(QString("TypeWrong")); + QSharedPointer resultItem3 = service->createEntry(item3); + QVERIFY(!resultItem3.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(typeWrong, not system) + CaEntry item4; + item4.setText(QString("Name")); + item4.setEntryTypeName(QString("TypeWrong")); + QSharedPointer resultItem4 = service->createEntry(item4); + QVERIFY(!resultItem4.isNull()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*resultItem4); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRoleParentType() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("TypeOK")); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB ( item, parent1, typeOk) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2= entries.count(); + //ADD TO DB ( item, parent1, typeWrong) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeWRONG")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB ( item, parent2, typeOk) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB ( group, parent1, typeOk) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRoleParentFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("Type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("Type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + query1.setFlagsOn(UninstallEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (item, parent1, system ) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Type")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB(item, parent1, not system ) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("Type")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(item, parent2 , system ) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(group, parent1, system ) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("Type")); + group1.setFlags(UninstallEntryFlag); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultGroup1->id()); + + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByParentTypeFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("Type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("Type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("TypeOK")); + query1.setFlagsOn(UninstallEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB (parent1, typeOk, system) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TypeOK")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB(parent1, typeOk, not system) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB(parent1, typeWRONG, system) + CaEntry item3; + item3.setText(QString("Name")); + item3.setEntryTypeName(QString("TypeWRONG")); + item3.setFlags(UninstallEntryFlag); + QSharedPointer resultItem3 = service->createEntry(item3); + QVERIFY(!resultItem3.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem3->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB(parent2, typeOk, system) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsByRoleParentTypeFlags() +{ + { + QSharedPointer service = CaService::instance(); + //ADD PARENT TO THE STORAGE + CaEntry parent(GroupEntryRole); + CaEntry parent2(GroupEntryRole); + parent.setText(QString("text")); + parent.setEntryTypeName(QString("Type")); + parent2.setText(QString("text")); + parent2.setEntryTypeName(QString("Type")); + QSharedPointer parentEntry = service->createEntry(parent); + QVERIFY(!parentEntry.isNull()); + QSharedPointer parentEntry2 = service->createEntry(parent2); + QVERIFY(!parentEntry2.isNull()); + + //GET INITIAL STATE FROM THE STORAGE + CaQuery query1; + query1.setEntryRoles(ItemEntryRole); + query1.setParentId(parentEntry->id()); + query1.addEntryTypeName(QString("TypeOK")); + query1.setFlagsOn(UninstallEntryFlag); + QList entries = service->getEntryIds(query1); + int entriesCount1 = entries.count(); + + //ADD TO DB ( item, parent1, typeOK, system ) + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("TypeOK")); + item1.setFlags(UninstallEntryFlag); + QSharedPointer resultItem1 = service->createEntry(item1); + QVERIFY(!resultItem1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount2 = entries.count(); + //ADD TO DB ( item, parent1, typeOK, not system ) + CaEntry item2; + item2.setText(QString("Name")); + item2.setEntryTypeName(QString("TypeOK")); + QSharedPointer resultItem2 = service->createEntry(item2); + QVERIFY(!resultItem2.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem2->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount3 = entries.count(); + //ADD TO DB( item, parent1, typeWRONG, system ) + CaEntry item3; + item3.setText(QString("Name")); + item3.setEntryTypeName(QString("TypeWRONG")); + item3.setFlags(UninstallEntryFlag); + QSharedPointer resultItem3 = service->createEntry(item3); + QVERIFY(!resultItem3.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultItem3->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount4 = entries.count(); + //ADD TO DB( item, parent2, typeOK, system ) + service->appendEntryToGroup(parentEntry2->id(), resultItem1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount5 = entries.count(); + //ADD TO DB( group, parent1, typeOK, system ) + CaEntry group1(GroupEntryRole); + group1.setText(QString("text")); + group1.setEntryTypeName(QString("TypeOK")); + group1.setFlags(UninstallEntryFlag); + QSharedPointer resultGroup1 = service->createEntry(group1); + QVERIFY(!resultGroup1.isNull()); + service->appendEntryToGroup(parentEntry->id(), resultGroup1->id()); + //GET STATE FROM THE STORAGE AFTER ADD + entries = service->getEntryIds(query1); + int entriesCount6 = entries.count(); + + //CHECK RESULTS + QCOMPARE(entriesCount1+1,entriesCount2); + QCOMPARE(entriesCount2,entriesCount3); + QCOMPARE(entriesCount3, entriesCount4); + QCOMPARE(entriesCount4, entriesCount5); + QCOMPARE(entriesCount5, entriesCount6); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*resultGroup1); + service->removeEntry(*parentEntry); + service->removeEntry(*parentEntry2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsCount() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("CountTest2")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("CountTest2")); + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("CountTest2")); + query1.setCount(1); + CaQuery query2; + query2.addEntryTypeName(QString("CountTest2")); + query2.setCount(2); + CaQuery query3; + query3.addEntryTypeName(QString("CountTest2")); + query3.setCount(3); + QList entries1 = service->getEntryIds(query1); + QList entries2 = service->getEntryIds(query2); + QList entries3 = service->getEntryIds(query3); + + //CHECK RESULTS + QCOMPARE(entries1.count(),1); + QCOMPARE(entries2.count(),2); + QCOMPARE(entries3.count(),3); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsSortDefault() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort9Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + + //ADD TO DB + CaEntry item1; + item1.setEntryTypeName(QString("Sort9Test")); + item1.setText(QString("Name")); + + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort9Test")); + query1.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QList entriesAsc = service->getEntryIds(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort9Test")); + query2.setSort(DefaultSortAttribute, Qt::DescendingOrder); + QList entriesDesc = service->getEntryIds(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0),resultItem1->id()); + QCOMPARE(entriesAsc.at(1),resultItem2->id()); + QCOMPARE(entriesAsc.at(2),resultItem3->id()); + QCOMPARE(entriesDesc.at(0),resultItem3->id()); + QCOMPARE(entriesDesc.at(1),resultItem2->id()); + QCOMPARE(entriesDesc.at(2),resultItem1->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsSortCreated() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort5Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Sort5Test")); + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort5Test")); + query1.setSort(CreatedTimestampSortAttribute, Qt::AscendingOrder); + QList entriesAsc = service->getEntryIds(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort5Test")); + query2.setSort(CreatedTimestampSortAttribute, Qt::DescendingOrder); + QList entriesDesc = service->getEntryIds(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0),resultItem1->id()); + QCOMPARE(entriesAsc.at(1),resultItem2->id()); + QCOMPARE(entriesAsc.at(2),resultItem3->id()); + QCOMPARE(entriesDesc.at(0),resultItem3->id()); + QCOMPARE(entriesDesc.at(1),resultItem2->id()); + QCOMPARE(entriesDesc.at(2),resultItem1->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsSortName() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort6Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("NameB")); + item1.setEntryTypeName(QString("Sort6Test")); + CaEntry item2; + item2.setText(QString("NameA")); + item2.setEntryTypeName(QString("Sort6Test")); + CaEntry item3; + item3.setText(QString("NameC")); + item3.setEntryTypeName(QString("Sort6Test")); + + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item2); + QSharedPointer resultItem3 = service->createEntry(item3); + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort6Test")); + query1.setSort(NameSortAttribute, Qt::AscendingOrder); + QList entriesAsc = service->getEntryIds(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort6Test")); + query2.setSort(NameSortAttribute, Qt::DescendingOrder); + QList entriesDesc = service->getEntryIds(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0),resultItem2->id()); + QCOMPARE(entriesAsc.at(1),resultItem1->id()); + QCOMPARE(entriesAsc.at(2),resultItem3->id()); + QCOMPARE(entriesDesc.at(0),resultItem3->id()); + QCOMPARE(entriesDesc.at(1),resultItem1->id()); + QCOMPARE(entriesDesc.at(2),resultItem2->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsSortLast() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort7Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Sort7Test")); + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + service->touch(*resultItem2); + service->touch(*resultItem1); + service->touch(*resultItem3); + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort7Test")); + query1.setSort(LastUsedSortAttribute, Qt::AscendingOrder); + QList entriesAsc = service->getEntryIds(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort7Test")); + query2.setSort(LastUsedSortAttribute, Qt::DescendingOrder); + QList entriesDesc = service->getEntryIds(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0),resultItem2->id()); + QCOMPARE(entriesAsc.at(1),resultItem1->id()); + QCOMPARE(entriesAsc.at(2),resultItem3->id()); + QCOMPARE(entriesDesc.at(0),resultItem3->id()); + QCOMPARE(entriesDesc.at(1),resultItem1->id()); + QCOMPARE(entriesDesc.at(2),resultItem2->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesIdsSortMost() +{ + { + QSharedPointer service = CaService::instance(); + //REMOVE "OLD" ENTRIES FROM STORAGE + CaQuery query; + query.addEntryTypeName(QString("Sort8Test")); + QList oldIds = service->getEntryIds(query); + if (oldIds.count()) { + service->removeEntries(oldIds); + } + //ADD TO DB + CaEntry item1; + item1.setText(QString("Name")); + item1.setEntryTypeName(QString("Sort8Test")); + QSharedPointer resultItem1 = service->createEntry(item1); + QSharedPointer resultItem2 = service->createEntry(item1); //item clone + QSharedPointer resultItem3 = service->createEntry(item1); //item clone + + service->touch(*resultItem2); + service->touch(*resultItem2); + service->touch(*resultItem2); + service->touch(*resultItem1); + service->touch(*resultItem1); + service->touch(*resultItem3); + + //GET STATE FROM THE STORAGE AFTER ADD + CaQuery query1; + query1.addEntryTypeName(QString("Sort8Test")); + query1.setSort(MostUsedSortAttribute, Qt::AscendingOrder); + QList entriesAsc = service->getEntryIds(query1); + CaQuery query2; + query2.addEntryTypeName(QString("Sort8Test")); + query2.setSort(MostUsedSortAttribute, Qt::DescendingOrder); + QList entriesDesc = service->getEntryIds(query2); + + //CHECK RESULTS + QCOMPARE(entriesAsc.count(),3); + QCOMPARE(entriesDesc.count(),3); + QCOMPARE(entriesAsc.at(0),resultItem3->id()); + QCOMPARE(entriesAsc.at(1),resultItem1->id()); + QCOMPARE(entriesAsc.at(2),resultItem2->id()); + QCOMPARE(entriesDesc.at(0),resultItem2->id()); + QCOMPARE(entriesDesc.at(1),resultItem1->id()); + QCOMPARE(entriesDesc.at(2),resultItem3->id()); + + //CLEANUP THE STORAGE AFTER THE TEST + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestGetEntriesByAttributes() +{ + { + CaEntry item; + item.setText("testName"); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + + CaIconDescription iconDescription; + iconDescription.setFilename("iconFileName"); + iconDescription.setSkinId("iconSkinId"); + iconDescription.setApplicationId("268458321"); + item.setIconDescription(iconDescription); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem = service->createEntry(item); + + QVERIFY(!resultItem.isNull()); + // entry from storage + QSharedPointer storageItem1 = service->getEntry(resultItem->id()); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(storageItem1); + QCOMPARE(storageItem1->role(), ItemEntryRole); + QCOMPARE(QString("testName"),storageItem1->text()); + QCOMPARE(QString("test"),storageItem1->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1")); + QCOMPARE(item.flags(),storageItem1->flags()); + QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId()); + + CaQuery query; + query.setEntryRoles(ItemEntryRole); + query.setAttribute(QString("attrName1"),QString("attrVal1")); + QVERIFY(query.attributes().contains(QString("attrName1"))); + QCOMPARE(query.attribute(QString("attrName1")),QString("attrVal1")); + QList entries = service->getEntryIds(query); + int entriesCount1 = entries.count(); + QSharedPointer afterGetItem = service->getEntry(entries.first()); + + QCOMPARE(afterGetItem->id(),storageItem1->id()); + //Cleanup + service->removeEntry(*resultItem); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_localization.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_localization.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,183 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ +#include "t_caclient.h" +#include "caservice.h" +#include "castorageproxy.h" +#include "caquery.h" +#include "calocalizationentry.h" +#include "cainnerentry.h" + +#ifdef Q_OS_SYMBIAN +//s60 +#include +//#include <> +#include +#include + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestLocalizationEntryGetters() +{ + CCaLocalizationEntry *entry(0); + _LIT(AttributeName,"AttributeName"); + _LIT(StringId,"StringId"); + _LIT(TableName,"TableName"); + _LIT(LocalizedString,"LocalizedString"); + + QT_TRAP_THROWING(entry = CCaLocalizationEntry::NewL()); + + entry->SetRowId(1); + entry->SetTextId(2); + + TRAPD(err, + entry->SetAttributeNameL(AttributeName); + entry->SetStringIdL(StringId); + entry->SetTableNameL(TableName); + entry->SetLocalizedStringL(LocalizedString); + ); + + QCOMPARE(err, KErrNone); + QCOMPARE(entry->GetRowId(), 1); + QCOMPARE(entry->GetTextId(), 2); + QCOMPARE(entry->GetAttributeName().Compare(AttributeName), 0); + QCOMPARE(entry->GetTableName().Compare(TableName), 0); + QCOMPARE(entry->GetStringId().Compare(StringId), 0); + QCOMPARE(entry->GetLocalizedString().Compare(LocalizedString), 0); + + delete entry; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestLocalizationTApp() +{ + _LIT( KTestDbSource, "C:\\testing\\data\\t_caclient\\castorage.db" ); // normal db + _LIT( KTestDbDest, "C:\\castorage.db" ); + + RFs fs; + User::LeaveIfError( fs.Connect() ); + CFileMan* fileManager = CFileMan::NewL( fs ); + + fileManager->Copy( KTestDbSource, KTestDbDest ); + + + CCaStorageProxy* proxy = CCaStorageProxy::NewL(); + + + _LIT(BadLocTxt,"loc://emailTest_/haha"); + _LIT(BadQmTxt,"loc://haha/haha"); + + _LIT(GoodLocTxt,"loc://emailTest_/txt_applib_dblist_games"); + _LIT(GoodLocKey,"txt_applib_dblist_games"); + _LIT(GoodLocResult,"Games"); + + + + CCaInnerEntry* entry = CCaInnerEntry::NewL(); + + entry->SetTextL( GoodLocTxt ); + CCaLocalizationEntry* locEntry = proxy->LocalizeTextL( entry ); + QVERIFY( !locEntry->GetStringId().Compare( GoodLocKey ) ); + QVERIFY( !entry->GetText().Compare( GoodLocResult ) ); + delete locEntry; + + entry->SetDescriptionL( BadLocTxt ); + CCaLocalizationEntry* locEntry2 = proxy->LocalizeDescriptionL( entry ); + QVERIFY( locEntry2 == NULL ); + QVERIFY( !entry->GetDescription().Compare( BadLocTxt ) ); + delete locEntry2; + + entry->SetDescriptionL( GoodLocTxt ); + CCaLocalizationEntry* locEntry3 = proxy->LocalizeDescriptionL( entry ); + QVERIFY( !locEntry3->GetStringId().Compare( GoodLocKey ) ); + QVERIFY( !entry->GetDescription().Compare( GoodLocResult ) ); + delete locEntry3; + + delete fileManager; + fs.Close(); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCreateLocalizedItem() +{ + { + const CaEntry constItem; + QCOMPARE(constItem.role(), ItemEntryRole); + + //create item + //check if proper entry returned + CaEntry item; + item.setText("testName",true); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + item.setDescription("description",true); + CaIconDescription iconDescription; + iconDescription.setFilename("iconFileName"); + iconDescription.setSkinId("iconSkinId"); + iconDescription.setApplicationId("268458321"); + + item.setIconDescription(iconDescription); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem = service->createEntry(item); + QCOMPARE(service->lastError(), NoErrorCode); + QVERIFY(!resultItem.isNull()); + QCOMPARE(resultItem->role(), ItemEntryRole); + QCOMPARE(item.text(),resultItem->text()); + QCOMPARE(item.description(),resultItem->description()); + QCOMPARE(item.entryTypeName(),resultItem->entryTypeName()); + QCOMPARE(QString("attrVal1"),resultItem->attribute("attrName1")); + QCOMPARE(item.flags(),resultItem->flags()); + int itId =item.id(); + int resItId =resultItem->id(); + QVERIFY(itId != resItId); + QCOMPARE(iconDescription.filename(),resultItem->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),resultItem->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),resultItem->iconDescription().applicationId()); + + // entry from storage + QSharedPointer storageItem1 = service->getEntry(resultItem->id()); + QVERIFY(storageItem1); + QCOMPARE(QString("testName"),storageItem1->text()); + QCOMPARE(QString("description"),storageItem1->description()); + QCOMPARE(QString("test"),storageItem1->entryTypeName()); + QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1")); + EntryFlags flags = item.flags(); + EntryFlags storageFlags = storageItem1->flags(); + QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename()); + QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId()); + QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId()); + QVERIFY(storageItem1->iconDescription().id() > 0); + + QCOMPARE(flags ,storageFlags); + + //Cleanup + service->removeEntry(*resultItem); + } +} + + + + + +#endif //Q_OS_SYMBIAN diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,2966 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +#include +#include + +#include "t_caclient.h" +#include "caservice.h" +#include "canotifier.h" +#include "canotifierfilter.h" +#include "caquery.h" +#include "t_caclientNotifier.h" + +const int entryIdFake(-1); +const int waitTime500ms(500); +const int waitTime1sec(1000); + +QTM_USE_NAMESPACE + +QStringList pluginPaths; +QString xmlName("caapphandlerplugin.xml"); + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::initTestCase() +{ +#ifdef Q_OS_SYMBIAN + startThread(); +#endif //Q_OS_SYMBIAN + mService = CaService::instance(); +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::cleanupTestCase() +{ +#ifdef Q_OS_SYMBIAN + stopThread(); +#endif //Q_OS_SYMBIAN + QSharedPointer serviceNull(NULL); + mService = serviceNull; + QTest::qWait(5000); +} + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +int threadFunction(void *params) +{ +#ifdef Q_OS_SYMBIAN + while (ETrue) { + User::ResetInactivityTime();//it should help for Viewserver11 panic + User::After(5000000); + } +#endif //Q_OS_SYMBIAN + return 0; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::startThread() +{ +#ifdef Q_OS_SYMBIAN + User::LeaveIfError(iThread.Create( + _L("thread_kill_viewsrv11"), + threadFunction, + 16384, + 4000, + 4000, + NULL)); + iThread.Resume(); +#endif //Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::stopThread() +{ +#ifdef Q_OS_SYMBIAN + iThread.Close(); +#endif //Q_OS_SYMBIAN +} + + +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAssignmentOperatorNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + CaNotifierFilter filter; + filter.setEntryRole(ItemEntryRole); + filter.setTypeNames(QStringList() << "typeName1" << "typeName2"); + filter.setParentId(22); + filter.setIds(QList() << 11 << 22); + + CaNotifierFilter filterAssign; + filterAssign = filter; + QCOMPARE(filterAssign.getEntryRole(), filter.getEntryRole()); + QCOMPARE(filterAssign.getParentId(), filter.getParentId()); + for (int i(0); i < filter.getIds().count(); i++) { + QCOMPARE(filterAssign.getIds().at(i), + filter.getIds().at(i)); + } + for (int i(0); i < filter.getTypeNames().count(); i++) { + QCOMPARE(filterAssign.getTypeNames().at(i), + filter.getTypeNames().at(i)); + } + + filter.setEntryRole(GroupEntryRole); + filter.getTypeNames().clear(); + filter.setTypeNames(QStringList() << "typeName3" << "typeName4"); + filter.setParentId(55); + filter.getIds().clear(); + filter.setIds(QList() << 33 << 44); + + QVERIFY(filterAssign.getEntryRole() != filter.getEntryRole()); + QVERIFY(filterAssign.getParentId() != filter.getParentId()); + for (int i(0); i < filter.getIds().count(); i++) { + QVERIFY(filterAssign.getIds().at(i) + != filter.getIds().at(i)); + } + for (int i(0); i < filter.getTypeNames().count(); i++) { + QVERIFY(filterAssign.getTypeNames().at(i) + != filter.getTypeNames().at(i)); + } + + CaNotifierFilter filterCopyConstructor(filter); + QCOMPARE(filterCopyConstructor.getEntryRole(), filter.getEntryRole()); + QCOMPARE(filterCopyConstructor.getParentId(), filter.getParentId()); + for (int i(0); i < filter.getIds().count(); i++) { + QCOMPARE(filterCopyConstructor.getIds().at(i), + filter.getIds().at(i)); + } + for (int i(0); i < filter.getTypeNames().count(); i++) { + QCOMPARE(filterCopyConstructor.getTypeNames().at(i), + filter.getTypeNames().at(i)); + } + + CaQuery query; + query.setEntryRoles(GroupEntryRole); + query.setEntryTypeNames(QStringList() << "Query1" << "Query2"); + query.setParentId(77); + + CaNotifierFilter filterQuery(query); + QCOMPARE(filterQuery.getEntryRole(), query.entryRoles()); + QCOMPARE(filterQuery.getParentId(), query.parentId()); + QCOMPARE(filterQuery.getIds().count(), 0); + for (int i(0); i < query.entryTypeNames().count(); i++) { + QCOMPARE(filterQuery.getTypeNames().at(i), + query.entryTypeNames().at(i)); + } + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddItemChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + QStringList strList; + strList.append("TypeName"); + filter->setTypeNames(strList); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + delete filter; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime500ms); + QTest::qWait(waitTime500ms); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddGroupChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(GroupEntryRole); + filter->setTypeNames(QStringList() << "TypeName"); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + + QSharedPointer entry = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + filter->setTypeNames(QStringList() << "TypeName"); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + int entryId = clientNotifier->mEntryId; + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntry(*entry); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryId); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryIdChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + filter->setTypeNames(QStringList() << "TypeName"); + filter->setIds(QList() << entry->id()); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + + int entryId = entry->id(); + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntry(entryId); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryId); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + delete filter; + mService->removeEntry(entry->id()); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryChangeTypeNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + clientNotifier->mEntryId = 0; + CaEntry *entryFake = new CaEntry(); + entryFake->setText("Text"); + entryFake->setEntryTypeName("TypeName"); + + bool removed = mService->removeEntry(*entryFake); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(removed, FALSE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + delete entryFake; + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryIdChangeTypeNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + clientNotifier->mEntryId = 0; + bool removed = mService->removeEntry(entryIdFake); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(removed, FALSE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + CaEntry item3; + item3.setText("Text"); + item3.setEntryTypeName("TypeName"); + QSharedPointer entry3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text"); + item4.setEntryTypeName("TypeName"); + QSharedPointer entry4 = mService->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList< QSharedPointer > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + entriesList.append(entry3); + entriesList.append(entry4); + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + filter->setTypeNames(QStringList() << "TypeName"); + filter->setIds(QList() << entry2->id() << entry3->id()); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry3->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + delete filter; + mService->removeEntries(entriesList); + QTest::qWait(waitTime500ms); + entriesList.clear(); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesIdsChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + CaEntry item3; + item3.setText("Text"); + item3.setEntryTypeName("TypeName"); + QSharedPointer entry3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text"); + item4.setEntryTypeName("TypeName"); + QSharedPointer entry4 = mService->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList entriesIdsList; + entriesIdsList.append(entry1->id()); + entriesIdsList.append(entry2->id()); + entriesIdsList.append(entry3->id()); + entriesIdsList.append(entry4->id()); + + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntries(entriesIdsList); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry4->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesIdsList); + QTest::qWait(waitTime500ms); + entriesIdsList.clear(); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesChangeTypeNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + CaEntry item3; + item3.setText("Text"); + item3.setEntryTypeName("TypeName"); + QSharedPointer entry3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text"); + item4.setEntryTypeName("TypeName"); + QSharedPointer entry4 = mService->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + entriesList.append(entry3); + entriesList.append(entry4); + + clientNotifier->mEntryId = 0; + + CaEntry itemFake1; + itemFake1.setText("Text"); + itemFake1.setEntryTypeName("TypeName"); + QSharedPointer entryFake1 = mService->createEntry(itemFake1); + int entryFake1Id = entryFake1->id(); + entryFake1->setId(entryIdFake); + QTest::qWait(waitTime1sec); + CaEntry itemFake2; + itemFake2.setText("Text"); + itemFake2.setEntryTypeName("TypeName"); + QSharedPointer entryFake2 = mService->createEntry(itemFake2); + int entryFake2Id = entryFake2->id(); + entryFake2->setId(entryIdFake); + QTest::qWait(waitTime1sec); + QList > entriesListFake; + entriesListFake.append(entryFake1); + entriesListFake.append(entryFake2); + + clientNotifier->mEntryId = 0; + clientNotifier->mChangeType = AddChangeType; + + bool removed = mService->removeEntries(entriesListFake); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(removed, FALSE); + + entryFake1->setId(entryFake1Id); + entryFake2->setId(entryFake2Id); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + mService->removeEntries(entriesListFake); + QTest::qWait(waitTime500ms); + entriesList.clear(); + entriesListFake.clear(); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesIdsChangeTypeNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + CaEntry item3; + item3.setText("Text"); + item3.setEntryTypeName("TypeName"); + QSharedPointer entry3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text"); + item4.setEntryTypeName("TypeName"); + QSharedPointer entry4 = mService->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList entriesIdsList; + entriesIdsList.append(entry1->id()); + entriesIdsList.append(entry2->id()); + entriesIdsList.append(entry3->id()); + entriesIdsList.append(entry4->id()); + + CaEntry itemFake1; + itemFake1.setText("Text"); + itemFake1.setEntryTypeName("TypeName"); + QSharedPointer entryFake1 = mService->createEntry(itemFake1); + int entryFake1Id = entryFake1->id(); + entryFake1->setId(entryIdFake); + QTest::qWait(waitTime1sec); + CaEntry itemFake2; + itemFake2.setText("Text"); + itemFake2.setEntryTypeName("TypeName"); + QSharedPointer entryFake2 = mService->createEntry(itemFake2); + int entryFake2Id = entryFake2->id(); + entryFake2->setId(entryIdFake); + QTest::qWait(waitTime1sec); + QList entriesIdsListFake; + entriesIdsListFake.append(entryFake1->id()); + entriesIdsListFake.append(entryFake2->id()); + + clientNotifier->mEntryId = 0; + clientNotifier->mChangeType = AddChangeType; + + bool removed = mService->removeEntries(entriesIdsListFake); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(removed, FALSE); + + entryFake1->setId(entryFake1Id); + entryFake2->setId(entryFake2Id); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesIdsList); + mService->removeEntry(*entryFake1); + mService->removeEntry(*entryFake2); + QTest::qWait(waitTime1sec); + entriesIdsList.clear(); + entriesIdsListFake.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveGroupChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + int entryId = clientNotifier->mEntryId; + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntry(*entry); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryId); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveGroupsChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + + CaEntry group1(GroupEntryRole); + group1.setText("Text"); + group1.setEntryTypeName("TypeName1"); + QSharedPointer entry1 = mService->createEntry(group1); + QTest::qWait(waitTime1sec); + CaEntry group2(GroupEntryRole); + group2.setText("Text"); + group2.setEntryTypeName("TypeName2"); + QSharedPointer entry2 = mService->createEntry(group2); + QTest::qWait(waitTime1sec); + CaEntry group3(GroupEntryRole); + group3.setText("Text"); + group3.setEntryTypeName("TypeName3"); + QSharedPointer entry3 = mService->createEntry(group3); + QTest::qWait(waitTime1sec); + CaEntry group4(GroupEntryRole); + group4.setText("Text"); + group4.setEntryTypeName("TypeName4"); + QSharedPointer entry4 = mService->createEntry(group4); + QTest::qWait(waitTime1sec); + + QList< QSharedPointer > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + entriesList.append(entry3); + entriesList.append(entry4); + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(GroupEntryRole); + filter->setTypeNames(QStringList() << "TypeName3" << "TypeName4"); + filter->setIds(QList() << entry3->id()); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry3->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + delete filter; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + entriesList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestUpdateChangeTypeNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + item.setDescription("description"); + + QSharedPointer entry = mService->createEntry(item); + + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + int entryId = clientNotifier->mEntryId; + delete clientNotifier; + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + filter->setIds(QList() << entry->id()); + TestCaClientNotifier *clientNotifierUpdate = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifierUpdate = clientNotifierUpdate->getNotifier(); + + connect(notifierUpdate, SIGNAL(entryChanged(int,ChangeType)), + clientNotifierUpdate, SLOT(entryChanged(int,ChangeType))); + connect(notifierUpdate, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifierUpdate, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + + bool updated = mService->updateEntry(*entry); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifierUpdate->mChangeType, UpdateChangeType); + QVERIFY(clientNotifierUpdate->mEntryId > 0); + QCOMPARE(clientNotifierUpdate->mEntryId, entryId); + QCOMPARE(clientNotifierUpdate->mEntryId, entry->id()); + QCOMPARE(clientNotifierUpdate->mEntry->description(), QString("description")); + QCOMPARE(updated, TRUE); + + // cleanup + disconnect(notifierUpdate, SIGNAL(entryChanged(int,ChangeType)), + clientNotifierUpdate, SLOT(entryChanged(int,ChangeType))); + disconnect(notifierUpdate, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifierUpdate, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + + delete clientNotifierUpdate; + delete filter; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestUpdateChangeTypeNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + + int entryId = clientNotifier->mEntryId; + clientNotifier->mEntryId = 0; + CaEntry itemFake; + itemFake.setText("Text"); + itemFake.setEntryTypeName("TypeName"); + + bool updated = mService->updateEntry(itemFake); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(updated, FALSE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddUpdateRemove() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + + + int entryId = clientNotifier->mEntryId; + clientNotifier->mEntryId = 0; + + bool updated = mService->updateEntry(*entry); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, UpdateChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + QCOMPARE(updated, TRUE); + + entryId = clientNotifier->mEntryId; + clientNotifier->mEntryId = 0; + + bool removed = mService->removeEntry(entryId); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRegisterNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime1sec); + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 1); + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 1); + QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 1); + QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 1); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime1sec); + + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 0); + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 0); + QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 0); + QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 0); + + delete clientNotifier; + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestUnregisterNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 1); + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 1); + QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 1); + QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 1); + + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime1sec); + + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 0); + QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 0); + QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 0); + QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 0); + + delete clientNotifier; + QTest::qWait(waitTime500ms); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestTouchEntryNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + filter->setIds(QList() << entry->id()); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + + bool touched = mService->touch(*entry); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + QCOMPARE(touched, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + delete filter; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestTouchEntryIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + QCOMPARE(clientNotifier->mEntryId, 0); + + bool touched = mService->touch(*entry); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + QCOMPARE(touched, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestTouchEntryNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mEntryId, 0); + + CaEntry *entryFake = new CaEntry(); + entryFake->setText("Text"); + entryFake->setEntryTypeName("TypeName"); + + bool touched = mService->touch(*entryFake); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(touched, FALSE); + + // cleanup + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + delete entryFake; + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + + +void TestCaClient::TestTouchEntryUidNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + QScopedPointer clientNotifier( + new TestCaClientNotifier(*mService)); + + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier.data(), SLOT(entryTouched(int))); + + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("application"); + item.setAttribute( + "application:uid", + "-3"); + + QSharedPointer entry = mService->createEntry(item); + + QTest::qWait(waitTime1sec); + + QVERIFY(!entry.isNull()); + + const int expectedEntryId = entry->id(); + + entry->setId(0); + + QCOMPARE(clientNotifier->mEntryId, 0); + + bool touched = mService->touch(*entry); + + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mEntryId, expectedEntryId); + QCOMPARE(touched, true); + + // cleanup + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier.data(), SLOT(entryTouched(int))); + + QTest::qWait(waitTime500ms); + + mService->removeEntry(expectedEntryId); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + + +// --------------------------------------------------------------------------- +// +void TestCaClient::TestTouchEntryIdNotifierFake() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mEntryId, 0); + + QScopedPointer entryFake(new CaEntry()); + entryFake->setText("Text"); + entryFake->setEntryTypeName("TypeName"); + entryFake->setId(entryIdFake); + + bool touched = mService->touch(*entryFake); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(touched, FALSE); + + // cleanup + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestTouchGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mEntryId, 0); + + bool touched = mService->touch(*entry); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entry->id()); + QCOMPARE(touched, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryTouched(int)), + clientNotifier, SLOT(entryTouched(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entry->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntryGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entryI = mService->createEntry(item); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI->id()); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntryGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entryI = mService->createEntry(item); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->appendEntryToGroup(((CaEntry &)*entryG).id(), (*entryI).id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI->id()); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntriesGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList< QSharedPointer > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntriesGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entryItem1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entryItem2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList entriesIdsList; + entriesIdsList.append(entryItem1->id()); + entriesIdsList.append(entryItem2->id()); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->appendEntriesToGroup(((CaEntry &)*entryGroup).id(), entriesIdsList); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesIdsList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesIdsList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntryGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entryI = mService->createEntry(item); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI->id()); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntryGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entryI = mService->createEntry(item); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->prependEntryToGroup(((CaEntry &)*entryG).id(), (*entryI).id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI->id()); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntriesGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList< QSharedPointer > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->prependEntriesToGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntriesGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entryItem1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entryItem2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList entriesIdsList; + entriesIdsList.append(entryItem1->id()); + entriesIdsList.append(entryItem2->id()); + + clientNotifier->mChangeType = RemoveChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool appended = mService->prependEntriesToGroup(((CaEntry &)*entryGroup).id(), entriesIdsList); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(appended, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesIdsList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesIdsList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList< QSharedPointer > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + + bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + QCOMPARE(appended, TRUE); + + clientNotifier->mChangeType = AddChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + bool removed = mService->removeEntryFromGroup((CaEntry &)*entryGroup, *entry1); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(removed, TRUE); + + clientNotifier->mChangeType = AddChangeType; + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + removed = mService->removeEntryFromGroup((CaEntry &)*entryGroup, *entry2); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList< QSharedPointer > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + + bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + QCOMPARE(appended, TRUE); + + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + bool removed = mService->removeEntryFromGroup(entryGroup->id(), entry1->id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(removed, TRUE); + + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + removed = mService->removeEntryFromGroup(entryGroup->id(), entry2->id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + + bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + QCOMPARE(appended, TRUE); + + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + bool removed = mService->removeEntriesFromGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryGroup = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryGroup->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryGroup->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text"); + item1.setEntryTypeName("TypeName"); + QSharedPointer entry1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text"); + item2.setEntryTypeName("TypeName"); + QSharedPointer entry2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + QList > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + + bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList); + QTest::qWait(waitTime1sec); + QCOMPARE(appended, TRUE); + + QList entriesIdList; + entriesIdList.append(entry1->id()); + entriesIdList.append(entry2->id()); + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + bool removed = mService->removeEntriesFromGroup(entryGroup->id(), entriesIdList); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryGroup->id()); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + mService->removeEntry(entryGroup->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); + entriesIdList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntryGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text1"); + item1.setEntryTypeName("TypeName1"); + QSharedPointer entryI1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text2"); + item2.setEntryTypeName("TypeName2"); + QSharedPointer entryI2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI1); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI2); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + + CaEntry item3; + item3.setText("Text3"); + item3.setEntryTypeName("TypeName3"); + QSharedPointer entryI3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool inserted = mService->insertEntryIntoGroup((CaEntry &)*entryG, *entryI3, entryI2->id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(inserted, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI1->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI2->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI3->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntryGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text1"); + item1.setEntryTypeName("TypeName1"); + QSharedPointer entryI1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text2"); + item2.setEntryTypeName("TypeName2"); + QSharedPointer entryI2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + bool appended = mService->appendEntryToGroup(entryG->id(), entryI1->id()); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + appended = mService->prependEntryToGroup(entryG->id(), entryI2->id()); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + + CaEntry item3; + item3.setText("Text3"); + item3.setEntryTypeName("TypeName3"); + QSharedPointer entryI3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool inserted = mService->insertEntryIntoGroup(entryG->id(), entryI3->id(), entryI2->id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(inserted, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI1->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI2->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI3->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntriesGroupNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text1"); + item1.setEntryTypeName("TypeName1"); + QSharedPointer entryI1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text2"); + item2.setEntryTypeName("TypeName2"); + QSharedPointer entryI2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI1); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI2); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + + CaEntry item3; + item3.setText("Text3"); + item3.setEntryTypeName("TypeName3"); + QSharedPointer entryI3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text4"); + item4.setEntryTypeName("TypeName4"); + QSharedPointer entryI4 = mService->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList > entriesList; + entriesList.append(entryI3); + entriesList.append(entryI4); + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool inserted = mService->insertEntriesIntoGroup((CaEntry &)*entryG, entriesList, entryI2->id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(inserted, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI1->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI2->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI3->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI4->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + entriesList.clear(); +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntriesGroupIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService); + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + QTest::qWait(waitTime500ms); + CaEntry group(GroupEntryRole); + group.setText("Text"); + group.setEntryTypeName("TypeName"); + QSharedPointer entryG = mService->createEntry(group); + QTest::qWait(waitTime1sec); + int groupId = entryG->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mEntryId > 0); + QCOMPARE(clientNotifier->mEntryId, entryG->id()); + + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + CaEntry item1; + item1.setText("Text1"); + item1.setEntryTypeName("TypeName1"); + QSharedPointer entryI1 = mService->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text2"); + item2.setEntryTypeName("TypeName2"); + QSharedPointer entryI2 = mService->createEntry(item2); + QTest::qWait(waitTime1sec); + + bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI1); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI2); + QTest::qWait(waitTime500ms); + QCOMPARE(appended, TRUE); + + CaEntry item3; + item3.setText("Text3"); + item3.setEntryTypeName("TypeName3"); + QSharedPointer entryI3 = mService->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text4"); + item4.setEntryTypeName("TypeName4"); + QSharedPointer entryI4 = mService->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList entriesIdsList; + entriesIdsList.append(entryI3->id()); + entriesIdsList.append(entryI4->id()); + clientNotifier->mEntryId = 0; + clientNotifier->mGroupId = 0; + + bool inserted = mService->insertEntriesIntoGroup(entryG->id(), entriesIdsList, entryI2->id()); + QTest::qWait(waitTime1sec); + + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mGroupId, groupId); + QCOMPARE(clientNotifier->mGroupId, entryG->id()); + QCOMPARE(inserted, TRUE); + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + mService->removeEntry(entryI1->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI2->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI3->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryI4->id()); + QTest::qWait(waitTime500ms); + mService->removeEntry(entryG->id()); + QTest::qWait(waitTime1sec); + entriesIdsList.clear(); + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +// --------------------------------------------------------------------------- +// +void TestCaClient::TestChangeEntryWithParentIdNotifier() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setParentId(1); // AllCollections + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter); + + CaNotifier *notifier = clientNotifier->getNotifier(); + + connect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + connect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + QTest::qWait(waitTime500ms); + + CaEntry entryToAdd(ItemEntryRole); + entryToAdd.setText("Text"); + entryToAdd.setEntryTypeName("TypeName"); + QSharedPointer entry = mService->createEntry(entryToAdd); + QTest::qWait(waitTime1sec); + int entryId = entry->id(); + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, 0); + QCOMPARE(clientNotifier->mCount, 0); + + bool appended = mService->appendEntryToGroup(3, entryId); // office + QTest::qWait(waitTime1sec); + + + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mCount, 1); + + mService->removeEntry(entryId); + + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier->mGroupId > 0); + QCOMPARE(clientNotifier->mCount, 2); + + disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)), + clientNotifier, SLOT(entryChanged(int, ChangeType))); + disconnect(notifier, SIGNAL(groupContentChanged(int)), + clientNotifier, SLOT(groupContentChanged(int))); + + QTest::qWait(waitTime500ms); + + delete clientNotifier; + delete filter; + + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +//QTEST_MAIN(homescreen::test::TestCaClient) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier_adv.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier_adv.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,267 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "t_caclient.h" +#include "caservice.h" +#include "canotifier.h" +#include "canotifierfilter.h" +#include "t_caclientNotifier.h" + +const int entryIdFake(-1); +const int waitTime500ms(500); +const int waitTime1sec(1000); + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddItemChangeTypeNotifier3Clients() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + TestCaClientNotifier *clientNotifier_1 = new TestCaClientNotifier(*service); + CaNotifier *notifier_1 = clientNotifier_1->getNotifier(); + + TestCaClientNotifier *clientNotifier_2 = new TestCaClientNotifier(*service); + CaNotifier *notifier_2 = clientNotifier_2->getNotifier(); + + TestCaClientNotifier *clientNotifier_3 = new TestCaClientNotifier(*service); + CaNotifier *notifier_3 = clientNotifier_3->getNotifier(); + + connect(notifier_1, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_1, SLOT(entryChanged(int,ChangeType))); + connect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)), + clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType))); + connect(notifier_3, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_3, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + + clientNotifier_1->mChangeType = RemoveChangeType; + clientNotifier_2->mChangeType = RemoveChangeType; + clientNotifier_3->mChangeType = RemoveChangeType; + terminatServer(); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entry = service->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier_1->mChangeType, AddChangeType); + QVERIFY(clientNotifier_1->mEntryId > 0); + QCOMPARE(clientNotifier_1->mEntryId, entry->id()); + QCOMPARE(clientNotifier_1->mEntryId, clientNotifier_2->mEntryId); + QCOMPARE(clientNotifier_3->mEntryId, clientNotifier_2->mEntryId); + QCOMPARE(clientNotifier_2->mChangeType, AddChangeType); + QCOMPARE(entry->text(), clientNotifier_2->mEntry->text()); + QCOMPARE(clientNotifier_3->mChangeType, AddChangeType); + + + // cleanup + disconnect(notifier_1, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_1, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)), + clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType))); + disconnect(notifier_3, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_3, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + delete clientNotifier_1; + delete clientNotifier_2; + delete clientNotifier_3; + service->removeEntry(entry->id()); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryChangeTypeNotifier3Clients() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + TestCaClientNotifier *clientNotifier_1 = new TestCaClientNotifier(*service); + CaNotifier *notifier_1 = clientNotifier_1->getNotifier(); + + TestCaClientNotifier *clientNotifier_2 = new TestCaClientNotifier(*service); + CaNotifier *notifier_2 = clientNotifier_2->getNotifier(); + + TestCaClientNotifier *clientNotifier_3 = new TestCaClientNotifier(*service); + CaNotifier *notifier_3 = clientNotifier_3->getNotifier(); + + connect(notifier_1, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_1, SLOT(entryChanged(int,ChangeType))); + connect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)), + clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType))); + connect(notifier_3, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_3, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + terminatServer(); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + + QSharedPointer entry = service->createEntry(item); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier_1->mChangeType, AddChangeType); + QVERIFY(clientNotifier_2->mEntryId > 0); + QCOMPARE(clientNotifier_3->mEntryId, entry->id()); + + int entryId_1 = clientNotifier_1->mEntryId; + clientNotifier_1->mEntryId = 0; + int entryId_2 = clientNotifier_2->mEntryId; + clientNotifier_2->mEntryId = 0; + int entryId_3 = clientNotifier_3->mEntryId; + clientNotifier_3->mEntryId = 0; + + bool removed = service->removeEntry(*entry); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier_1->mChangeType, RemoveChangeType); + QCOMPARE(clientNotifier_2->mChangeType, RemoveChangeType); + QCOMPARE(clientNotifier_3->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier_1->mEntryId > 0); + QCOMPARE(clientNotifier_1->mEntryId, entryId_1); + QCOMPARE(clientNotifier_2->mEntryId, entryId_2); + QCOMPARE(clientNotifier_3->mEntryId, entryId_3); + QCOMPARE(entryId_1, entryId_3); + QCOMPARE(entryId_2, entryId_3); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier_1, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_1, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier_2, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier_2, SLOT(entryChanged(const CaEntry &,ChangeType))); + disconnect(notifier_3, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_3, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier_1; + delete clientNotifier_2; + delete clientNotifier_3; + service->removeEntry(entry->id()); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesChangeTypeNotifier3Clients() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + TestCaClientNotifier *clientNotifier_1 = new TestCaClientNotifier(*service); + CaNotifier *notifier_1 = clientNotifier_1->getNotifier(); + + TestCaClientNotifier *clientNotifier_2 = new TestCaClientNotifier(*service); + CaNotifier *notifier_2 = clientNotifier_2->getNotifier(); + + TestCaClientNotifier *clientNotifier_3 = new TestCaClientNotifier(*service); + CaNotifier *notifier_3 = clientNotifier_3->getNotifier(); + + connect(notifier_1, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_1, SLOT(entryChanged(int,ChangeType))); + connect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)), + clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType))); + connect(notifier_3, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_3, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + + CaEntry item1; + item1.setText("Text1"); + item1.setEntryTypeName("TypeName1"); + QSharedPointer entry1 = service->createEntry(item1); + QTest::qWait(waitTime1sec); + CaEntry item2; + item2.setText("Text2"); + item2.setEntryTypeName("TypeName2"); + QSharedPointer entry2 = service->createEntry(item2); + QTest::qWait(waitTime1sec); + CaEntry item3; + item3.setText("Text3"); + item3.setEntryTypeName("TypeName3"); + QSharedPointer entry3 = service->createEntry(item3); + QTest::qWait(waitTime1sec); + CaEntry item4; + item4.setText("Text4"); + item4.setEntryTypeName("TypeName4"); + QSharedPointer entry4 = service->createEntry(item4); + QTest::qWait(waitTime1sec); + + QList > entriesList; + entriesList.append(entry1); + entriesList.append(entry2); + entriesList.append(entry3); + entriesList.append(entry4); + + clientNotifier_1->mEntryId = clientNotifier_2->mEntryId = + clientNotifier_3->mEntryId = 0; + + bool removed = service->removeEntries(entriesList); + QTest::qWait(waitTime1sec); + + QCOMPARE(clientNotifier_1->mChangeType, RemoveChangeType); + QCOMPARE(clientNotifier_2->mChangeType, RemoveChangeType); + QCOMPARE(clientNotifier_3->mChangeType, RemoveChangeType); + QVERIFY(clientNotifier_1->mEntryId > 0); + QCOMPARE(clientNotifier_1->mEntryId, clientNotifier_2->mEntryId); + QCOMPARE(clientNotifier_1->mEntryId, clientNotifier_3->mEntryId); + QCOMPARE(removed, TRUE); + + // cleanup + disconnect(notifier_1, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_1, SLOT(entryChanged(int,ChangeType))); + disconnect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)), + clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType))); + disconnect(notifier_3, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier_3, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + + delete clientNotifier_1; + delete clientNotifier_2; + delete clientNotifier_3; + service->removeEntries(entriesList); + QTest::qWait(waitTime500ms); + entriesList.clear(); + } +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK +// __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier_ext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier_ext.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,532 @@ +/* +* 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: Extra tests notifications. +* +*/ + + +#include "t_caclient.h" +#include "caservice.h" +#include "canotifier.h" +#include "canotifierfilter.h" +#include "t_caclientnotifier.h" + +const int entryIdFake(-1); +const int waitTimeMin(100); +const int waitTime500ms(500); +const int waitTime1sec(1000); + +const int noOfClients(3); +const int noOfManyClients(20); + +class Thread: public QThread +{ +public: + enum OpType {None, AddItem, RemoveEntry, RemoveEntryId, TooMuchClients}; + void run(); + Thread(): mOpType(None), mRemoved(false), mEntry(), mId(0), mClientNotifier(NULL), mNotifier(NULL) { } + ~Thread(); + + OpType mOpType; + bool mRemoved; + QSharedPointer mEntry; + int mId; + TestCaClientNotifier *mClientNotifier; + CaNotifier *mNotifier; +}; + +Thread::~Thread() +{ + QSharedPointer service = CaService::instance(); + service->removeEntry(mId); + disconnect(mNotifier, SIGNAL(entryChanged(int,ChangeType)), + mClientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete mClientNotifier; +} + +void Thread::run() +{ + QTest::qWait(waitTimeMin); + QSharedPointer service = CaService::instance(); + CaNotifierFilter *filter = new CaNotifierFilter(); + filter->setEntryRole(ItemEntryRole); + filter->setTypeNames(QStringList() << "TypeName"); + mClientNotifier = new TestCaClientNotifier(*service, filter); + mNotifier = mClientNotifier->getNotifier(); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + switch (mOpType) { + case AddItem: { + connect(mNotifier, SIGNAL(entryChanged(int,ChangeType)), + mClientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + QSharedPointer entry = service->createEntry(item); + mId = entry->id(); + } + break; + case RemoveEntry: { + connect(mNotifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + mClientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + QTest::qWait(waitTime1sec); + mRemoved = service->removeEntry(*mEntry); + } + break; + case RemoveEntryId: { + connect(mNotifier, SIGNAL(entryChanged(int,ChangeType)), + mClientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime1sec); + mRemoved = service->removeEntry(mId); + } + break; + case TooMuchClients: { + connect(mNotifier, SIGNAL(entryChanged(int,ChangeType)), + mClientNotifier, SLOT(entryChanged(int,ChangeType))); + } + break; + default: + qWarning("Thread::run: unknown operation (mOpType)"); + break; + } + + exec(); +} + +/* +class ThreadRemoveEntry: public QThread +{ +public: + void run(); + ~ThreadRemoveEntry(); + + bool mRemoved; + CaEntry *mEntry; + int mId; + TestCaClientNotifier *mClientNotifier; + CaNotifier *mNotifier; +}; + +ThreadRemoveEntry::~ThreadRemoveEntry() +{ + disconnect(mNotifier, SIGNAL(entryChanged(int,ChangeType)), + mClientNotifier, SLOT(entryChanged(int,ChangeType)) ); + QTest::qWait(waitTime500ms); + delete mClientNotifier; +} + +void ThreadRemoveEntry::run() +{ + QSharedPointer service = CaService::instance(); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*service); + CaNotifier *notifier = clientNotifier->getNotifier(); + connect( notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType )), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType )) ); + + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + + mRemoved = service->removeEntry(*mEntry); + + exec(); +} +*/ + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddItemChangeTypeNotifierNClients() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*service); + CaNotifier *notifier = clientNotifier->getNotifier(); + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + + QTest::qWait(waitTime1sec); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entries[noOfClients]; + for (int i=0; icreateEntry(item); + QTest::qWait(waitTime1sec); + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, entries[i]->id()); + QCOMPARE(clientNotifier->mCount, i+1); + } + + for (int i=0; iid() != entries[j]->id()); + } + } + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + for (int i=0; iremoveEntry(entries[i]->id()); + } + } + + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddItemChangeTypeNotifierNClientsFast() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*service); + CaNotifier *notifier = clientNotifier->getNotifier(); + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + + QTest::qWait(waitTime1sec); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entries[noOfClients]; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + for (int i=0; icreateEntry(item); + } + QTest::qWait(waitTime1sec); + QCOMPARE(clientNotifier->mCount, 3); + for (int i=0; imEntryIds->contains(entries[i]->id())); + for (int j=i+1; jid() != entries[j]->id()); + } + } + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + for (int i=0; iremoveEntry(entries[i]->id()); + } + } + + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddItemChangeTypeNotifierNClientsThreads() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + Thread threads[noOfClients]; + for (int i=0; imCount, noOfClients); + for (int j=0; jmEntryIds->at(j) + != threads[i].mClientNotifier->mEntryIds->at(k)); + } + } + } + for (int i=0; imEntryIds->contains(threads[i].mId)); + } + } + + for (int i=0; i service = CaService::instance(); + TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*service); + CaNotifier *notifier = clientNotifier->getNotifier(); + connect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)), + clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType))); + + QTest::qWait(waitTime1sec); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entries[noOfClients]; + for (int i=0; icreateEntry(item); + QTest::qWait(waitTime1sec); + QCOMPARE(clientNotifier->mChangeType, AddChangeType); + QCOMPARE(clientNotifier->mEntryId, entries[i]->id()); + QCOMPARE(clientNotifier->mCount, 2*(i+1)); + } + for (int i=0; iremoveEntry(*entries[i]); + QVERIFY(removed); + QTest::qWait(waitTime1sec); + QCOMPARE(clientNotifier->mChangeType, RemoveChangeType); + QCOMPARE(clientNotifier->mEntryId, entries[i]->id()); + } + + // cleanup + disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)), + clientNotifier, SLOT(entryChanged(int,ChangeType))); + QTest::qWait(waitTime500ms); + delete clientNotifier; + } + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryChangeTypeNotifierNClientsThreads() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + QTest::qWait(waitTime1sec); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + QSharedPointer entries[noOfClients]; + for (int i=0; icreateEntry(item); + } + + QTest::qWait(waitTime1sec); + Thread threads[noOfClients]; + for (int i=0; imChangeType, RemoveChangeType); + QCOMPARE(threads[i].mClientNotifier->mCount, noOfClients); + QVERIFY(threads[i].mClientNotifier->mEntryIds->contains(entries[i]->id())); + } + + for (int i=0; iremoveEntry(*entries[i]); + QTest::qWait(waitTime1sec); + } + + } + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryIdChangeTypeNotifierNClientsThreads() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + QTest::qWait(waitTime1sec); + CaEntry item; + item.setText("Text"); + item.setEntryTypeName("TypeName"); + int ids[noOfClients]; + for (int i=0; icreateEntry(item)->id(); + } + + QTest::qWait(waitTime1sec); + Thread threads[noOfClients]; + for (int i=0; imChangeType, RemoveChangeType); + QCOMPARE(threads[i].mClientNotifier->mCount, noOfClients); + QVERIFY(threads[i].mClientNotifier->mEntryIds->contains(ids[i])); + } + + for (int i=0; iremoveEntry(ids[i]); + QTest::qWait(waitTime1sec); + } + + } + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAddItemChangeTypeNotifierManyClientsThreads() +{ +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARK; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN + { + QSharedPointer service = CaService::instance(); + + Thread threads[noOfManyClients]; + for (int i=0; icreateEntry(item)->id(); + } + QTest::qWait(6*noOfManyClients*waitTime1sec); + + for (int i=0; imCount, noOfClients); + for (int j=0; jmEntryIds->at(j) + != threads[i].mClientNotifier->mEntryIds->at(k)); + } + } + } + for (int i=0; imEntryIds->contains(ids[i])); + } + } + + for (int i=0; iremoveEntry(ids[i]); + QVERIFY(removed); + QTest::qWait(waitTime1sec); + } + + } + +#ifdef Q_OS_SYMBIAN +#ifdef UT_MEMORY_CHECK + __UHEAP_MARKEND; +#endif//UT_MEMORY_CHECK +#endif//Q_OS_SYMBIAN +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_organize.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_organize.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,1028 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntryIntoGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->appendEntryToGroup(9999, entry1->id())); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(!service->appendEntryToGroup(group->id(), 9999)); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(service->appendEntryToGroup(group->id(), entry1->id())); + QCOMPARE(service->lastError() , NoErrorCode); + + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),1); + QVERIFY(service->appendEntryToGroup(group->id(), entry2->id())); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QCOMPARE(entries.at(0),entry1->id()); + QCOMPARE(entries.at(1),entry2->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntryIntoGroup2() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->appendEntryToGroup(groupEntry, *entry1)); + QVERIFY(!service->appendEntryToGroup(*group , itemEntry)); + QVERIFY(service->appendEntryToGroup(*group , *entry1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),1); + QVERIFY(service->appendEntryToGroup(*group, *entry2)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QCOMPARE(entries.at(0),entry1->id()); + QCOMPARE(entries.at(1),entry2->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntriesIntoGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer entry3 = service->createEntry(itemEntry); + QSharedPointer entry4 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList entries1; + entries1.append(entry1->id()); + entries1.append(entry2->id()); + QList entries2; + entries2.append(entry3->id()); + entries2.append(entry4->id()); + QList wrongEntries1; + wrongEntries1.append(entry1->id()); + wrongEntries1.append(9999); + + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->appendEntriesToGroup(9999, entries1)); + QVERIFY(!service->appendEntriesToGroup(group->id(), wrongEntries1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + + QVERIFY(service->appendEntriesToGroup(group->id(), entries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QVERIFY(service->appendEntriesToGroup(group->id(), entries2)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),4); + + QCOMPARE(entries.at(0),entry1->id()); + QCOMPARE(entries.at(1),entry2->id()); + QCOMPARE(entries.at(2),entry3->id()); + QCOMPARE(entries.at(3),entry4->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*entry3); + service->removeEntry(*entry4); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestAppendEntriesIntoGroup2() +{ + { + QSharedPointer itemEntry (new CaEntry()); + itemEntry->setText("item"); + itemEntry->setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(*itemEntry); + QSharedPointer entry2 = service->createEntry(*itemEntry); + QSharedPointer entry3 = service->createEntry(*itemEntry); + QSharedPointer entry4 = service->createEntry(*itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList< QSharedPointer > entries1; + entries1.append(entry1); + entries1.append(entry2); + QList< QSharedPointer > entries2; + entries2.append(entry3); + entries2.append(entry4); + QList > wrongEntries1; + wrongEntries1.append(entry1); + wrongEntries1.append(itemEntry); //this item has unspecified id + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->appendEntriesToGroup(groupEntry, entries1)); + QVERIFY(!service->appendEntriesToGroup(*group, wrongEntries1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + QVERIFY(service->appendEntriesToGroup(*group, entries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QVERIFY(service->appendEntriesToGroup(*group, entries2)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),4); + + QCOMPARE(entries.at(0),entry1->id()); + QCOMPARE(entries.at(1),entry2->id()); + QCOMPARE(entries.at(2),entry3->id()); + QCOMPARE(entries.at(3),entry4->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*entry3); + service->removeEntry(*entry4); + service->removeEntry(*group); + } +} + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntryIntoGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->prependEntryToGroup(9999, entry1->id())); + QVERIFY(service->lastError() != NoErrorCode); + QVERIFY(!service->prependEntryToGroup(group->id(), 9999)); + QVERIFY(service->lastError() != NoErrorCode); + QVERIFY(service->prependEntryToGroup(group->id(), entry1->id())); + QCOMPARE(service->lastError() , NoErrorCode); + + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),1); + QVERIFY(service->prependEntryToGroup(group->id(), entry2->id())); + entries = service->getEntryIds(query); + + QCOMPARE(entries.count(),2); + QCOMPARE(entries.at(0),entry2->id()); + QCOMPARE(entries.at(1),entry1->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntryIntoGroup2() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->prependEntryToGroup(groupEntry, *entry1)); + QVERIFY(!service->prependEntryToGroup(*group , itemEntry)); + QVERIFY(service->prependEntryToGroup(*group , *entry1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),1); + QVERIFY(service->prependEntryToGroup(*group, *entry2)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QCOMPARE(entries.at(0),entry2->id()); + QCOMPARE(entries.at(1),entry1->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntriesIntoGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer entry3 = service->createEntry(itemEntry); + QSharedPointer entry4 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList entries1; + entries1.append(entry1->id()); + entries1.append(entry2->id()); + QList entries2; + entries2.append(entry3->id()); + entries2.append(entry4->id()); + QList wrongEntries1; + wrongEntries1.append(entry1->id()); + wrongEntries1.append(9999); + + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->prependEntriesToGroup(9999, entries1)); + QVERIFY(!service->prependEntriesToGroup(group->id(), wrongEntries1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + + QVERIFY(service->prependEntriesToGroup(group->id(), entries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QVERIFY(service->prependEntriesToGroup(group->id(), entries2)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),4); + + QCOMPARE(entries.at(0),entry3->id()); + QCOMPARE(entries.at(1),entry4->id()); + QCOMPARE(entries.at(2),entry1->id()); + QCOMPARE(entries.at(3),entry2->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*entry3); + service->removeEntry(*entry4); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestPrependEntriesIntoGroup2() +{ + { + QSharedPointer itemEntry (new CaEntry()); + itemEntry->setText("item"); + itemEntry->setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(*itemEntry); + QSharedPointer entry2 = service->createEntry(*itemEntry); + QSharedPointer entry3 = service->createEntry(*itemEntry); + QSharedPointer entry4 = service->createEntry(*itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList< QSharedPointer > entries1; + entries1.append(entry1); + entries1.append(entry2); + QList< QSharedPointer > entries2; + entries2.append(entry3); + entries2.append(entry4); + QList< QSharedPointer > wrongEntries1; + wrongEntries1.append(entry1); + wrongEntries1.append(itemEntry); //this item has unspecified id + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->prependEntriesToGroup(groupEntry, entries1)); + QVERIFY(!service->prependEntriesToGroup(*group, wrongEntries1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + QVERIFY(service->prependEntriesToGroup(*group, entries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QVERIFY(service->prependEntriesToGroup(*group, entries2)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),4); + + QCOMPARE(entries.at(0),entry3->id()); + QCOMPARE(entries.at(1),entry4->id()); + QCOMPARE(entries.at(2),entry1->id()); + QCOMPARE(entries.at(3),entry2->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*entry3); + service->removeEntry(*entry4); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntryIntoGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(service->prependEntryToGroup(group->id(), entry1->id())); + + QVERIFY(!service->insertEntryIntoGroup(9999, entry2->id(), entry1->id())); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(!service->insertEntryIntoGroup(group->id(), 9999, entry1->id())); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(!service->insertEntryIntoGroup(group->id(), entry2->id(), 9999)); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(service->insertEntryIntoGroup(group->id(), entry2->id(), entry1->id())); + QCOMPARE(service->lastError() , NoErrorCode); + + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QCOMPARE(entries.at(0),entry2->id()); + QCOMPARE(entries.at(1),entry1->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntryIntoGroup2() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(service->prependEntryToGroup(*group, *entry1)); + + QVERIFY(!service->insertEntryIntoGroup(groupEntry, *entry2, entry1->id())); + QVERIFY(!service->insertEntryIntoGroup(*group, itemEntry, entry1->id())); + QVERIFY(!service->insertEntryIntoGroup(*group, *entry2, 9999)); + + QVERIFY(service->insertEntryIntoGroup(*group, *entry2, entry1->id())); + + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QCOMPARE(entries.at(0),entry2->id()); + QCOMPARE(entries.at(1),entry1->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntriesIntoGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry3 = service->createEntry(itemEntry); + QSharedPointer entry4 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList entries2; + entries2.append(entry3->id()); + entries2.append(entry4->id()); + QList wrongEntries1; + wrongEntries1.append(entry1->id()); + wrongEntries1.append(9999); + + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(service->prependEntryToGroup(group->id(), entry1->id())); + + QVERIFY(!service->insertEntriesIntoGroup(9999, entries2, entry1->id())); + QVERIFY(!service->insertEntriesIntoGroup(group->id(), wrongEntries1, entry1->id())); + QVERIFY(!service->insertEntriesIntoGroup(group->id(), entries2, 9999)); + + QVERIFY(service->insertEntriesIntoGroup(group->id(), entries2, entry1->id())); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),3); + + QCOMPARE(entries.at(0),entry3->id()); + QCOMPARE(entries.at(1),entry4->id()); + QCOMPARE(entries.at(2),entry1->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry3); + service->removeEntry(*entry4); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestInsertEntriesIntoGroup2() +{ + { + QSharedPointer itemEntry (new CaEntry()); + itemEntry->setText("item"); + itemEntry->setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(*itemEntry); + QSharedPointer entry3 = service->createEntry(*itemEntry); + QSharedPointer entry4 = service->createEntry(*itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList< QSharedPointer > entries2; + entries2.append(entry3); + entries2.append(entry4); + QList< QSharedPointer > wrongEntries1; + wrongEntries1.append(entry1); + wrongEntries1.append(itemEntry); //this item has unspecified id + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(service->prependEntryToGroup(group->id(), entry1->id())); + + QVERIFY(!service->insertEntriesIntoGroup(groupEntry, entries2, entry1->id())); + QVERIFY(!service->insertEntriesIntoGroup(*group, wrongEntries1, entry1->id())); + QVERIFY(!service->insertEntriesIntoGroup(*group, entries2, 9999)); + + QVERIFY(service->insertEntriesIntoGroup(*group, entries2, entry1->id())); + + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),3); + + QCOMPARE(entries.at(0),entry3->id()); + QCOMPARE(entries.at(1),entry4->id()); + QCOMPARE(entries.at(2),entry1->id()); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry3); + service->removeEntry(*entry4); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryFromGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->removeEntryFromGroup(9999, entry1->id())); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(!service->removeEntryFromGroup(group->id(), 9999)); + QVERIFY(service->lastError() != NoErrorCode); + + QVERIFY(service->prependEntryToGroup(group->id(), entry1->id())); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),1); + QVERIFY(service->removeEntryFromGroup(group->id(), entry1->id())); + QCOMPARE(service->lastError() , NoErrorCode); + + + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntryFromGroup2() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(!service->removeEntryFromGroup(groupEntry, *entry1)); + QVERIFY(!service->removeEntryFromGroup(*group, itemEntry)); + + QVERIFY(service->prependEntryToGroup(group->id(), entry1->id())); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),1); + QVERIFY(service->removeEntryFromGroup(*group, *entry1)); + + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesFromGroup1() +{ + { + CaEntry itemEntry; + itemEntry.setText("item"); + itemEntry.setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(itemEntry); + QSharedPointer entry2 = service->createEntry(itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList entries1; + entries1.append(entry1->id()); + entries1.append(entry2->id()); + QList wrongEntries1; + wrongEntries1.append(entry1->id()); + wrongEntries1.append(9999); + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(service->prependEntriesToGroup(group->id(), entries1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + QVERIFY(!service->removeEntriesFromGroup(9999, entries1)); + QVERIFY(!service->removeEntriesFromGroup(group->id(), wrongEntries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + + QVERIFY(service->removeEntriesFromGroup(group->id(), entries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveEntriesFromGroup2() +{ + { + QSharedPointer itemEntry (new CaEntry); + itemEntry->setText("item"); + itemEntry->setEntryTypeName("typeok"); + CaEntry groupEntry(GroupEntryRole); + groupEntry.setText("group"); + groupEntry.setEntryTypeName("typeok"); + QSharedPointer service = CaService::instance(); + + QSharedPointer entry1 = service->createEntry(*itemEntry); + QSharedPointer entry2 = service->createEntry(*itemEntry); + QSharedPointer group = service->createEntry(groupEntry); + + QList > entries1; + entries1.append(entry1); + entries1.append(entry2); + QList > wrongEntries1; + wrongEntries1.append(entry1); + wrongEntries1.append(itemEntry); //this item has unspecified id + + CaQuery query; + query.setParentId(group->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QVERIFY(service->prependEntriesToGroup(*group, entries1)); + QList entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + + QVERIFY(!service->removeEntriesFromGroup(groupEntry, entries1)); + QVERIFY(!service->removeEntriesFromGroup(*group, wrongEntries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),2); + + QVERIFY(service->removeEntriesFromGroup(*group, entries1)); + entries = service->getEntryIds(query); + QCOMPARE(entries.count(),0); + + //Cleanup + service->removeEntry(*entry1); + service->removeEntry(*entry2); + service->removeEntry(*group); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCustomSortArrange() +{ + QSharedPointer service = CaService::instance(); + CaEntry itemEntry_1; + itemEntry_1.setText("item_1"); + itemEntry_1.setEntryTypeName("collection"); + CaEntry groupEntry_1(GroupEntryRole); + groupEntry_1.setText("group_1"); + groupEntry_1.setEntryTypeName("collection"); + + QSharedPointer entry_1 = service->createEntry(itemEntry_1); + QSharedPointer entry_2 = service->createEntry(itemEntry_1); + QSharedPointer entry_3 = service->createEntry(itemEntry_1); + QSharedPointer entry_4 = service->createEntry(itemEntry_1); + QSharedPointer group_1 = service->createEntry(groupEntry_1); + + QList entriesIds; + entriesIds << entry_1->id() << entry_2->id() + << entry_3->id() << entry_4->id(); + service->appendEntriesToGroup(group_1->id(), entriesIds); + + CaQuery query; + query.setParentId(group_1->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QList entriesIdsBefore = service->getEntryIds(query); + QVERIFY(entriesIds == entriesIdsBefore); + + entriesIds.clear(); + for (int i(entriesIdsBefore.count()-1); i >= 0; i--) { + entriesIds.append(entriesIdsBefore.at(i)); + } + + QVERIFY(service->customSort(group_1->id(), entriesIds)); + QTest::qWait(500); + QList entriesIdsAfter = service->getEntryIds(query); + + QVERIFY(entriesIds != entriesIdsBefore); + QVERIFY(entriesIds == entriesIdsAfter); + + // cleanup + service->removeEntries(entriesIdsAfter << group_1->id()); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCustomSortGroups() +{ + QSharedPointer service = CaService::instance(); + CaEntry itemEntry_1; + itemEntry_1.setText("item_1"); + itemEntry_1.setEntryTypeName("collection"); + CaEntry groupEntry_1(GroupEntryRole); + groupEntry_1.setText("group_1"); + groupEntry_1.setEntryTypeName("collection"); + + QSharedPointer entry_1 = service->createEntry(itemEntry_1); + QSharedPointer entry_2 = service->createEntry(itemEntry_1); + QSharedPointer entry_3 = service->createEntry(itemEntry_1); + QSharedPointer entry_4 = service->createEntry(itemEntry_1); + QSharedPointer group_1 = service->createEntry(groupEntry_1); + + CaEntry itemEntry_2; + itemEntry_2.setText("item_2"); + itemEntry_2.setEntryTypeName("collection"); + CaEntry groupEntry_2(GroupEntryRole); + groupEntry_2.setText("group_2"); + groupEntry_2.setEntryTypeName("collection"); + + QSharedPointer entry_5 = service->createEntry(itemEntry_2); + QSharedPointer entry_6 = service->createEntry(itemEntry_2); + QSharedPointer entry_7 = service->createEntry(itemEntry_2); + QSharedPointer entry_8 = service->createEntry(itemEntry_2); + QSharedPointer group_2 = service->createEntry(groupEntry_2); + + QList entriesIds; + entriesIds << entry_1->id() << entry_2->id() + << entry_3->id() << entry_4->id(); + service->appendEntriesToGroup(group_1->id(), entriesIds); + + entriesIds.clear(); + entriesIds << entry_5->id() << entry_6->id() + << entry_7->id() << entry_8->id(); + service->appendEntriesToGroup(group_2->id(), entriesIds); + + CaQuery query; + query.setParentId(group_1->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QList entriesIdsBefore_1 = service->getEntryIds(query); + + query.setParentId(group_2->id()); + QList entriesIdsBefore_2 = service->getEntryIds(query); + QVERIFY(entriesIdsBefore_1 != entriesIdsBefore_2); + + entriesIds.clear(); + for (int i(entriesIdsBefore_1.count()-1); i >= 0; i--) { + entriesIds.append(entriesIdsBefore_1.at(i)); + } + + QVERIFY(service->customSort(group_1->id(), entriesIds)); + QTest::qWait(500); + query.setParentId(group_1->id()); + QList entriesIdsAfter_1 = service->getEntryIds(query); + query.setParentId(group_2->id()); + QList entriesIdsAfter_2 = service->getEntryIds(query); + + QVERIFY(entriesIds != entriesIdsBefore_1); + QVERIFY(entriesIds == entriesIdsAfter_1); + QVERIFY(entriesIds != entriesIdsBefore_2); + QVERIFY(entriesIdsBefore_2 == entriesIdsAfter_2); + + entriesIds.clear(); + for (int i(entriesIdsBefore_2.count()-1); i >= 0; i--) { + entriesIds.append(entriesIdsBefore_2.at(i)); + } + + QVERIFY(service->customSort(group_2->id(), entriesIds)); + QTest::qWait(500); + query.setParentId(group_1->id()); + entriesIdsBefore_1 = service->getEntryIds(query); + query.setParentId(group_2->id()); + entriesIdsAfter_2 = service->getEntryIds(query); + + QVERIFY(entriesIds != entriesIdsBefore_2); + QVERIFY(entriesIds == entriesIdsAfter_2); + QVERIFY(entriesIds != entriesIdsBefore_1); + QVERIFY(entriesIdsBefore_1 == entriesIdsAfter_1); + QVERIFY(entriesIdsBefore_2 != entriesIdsAfter_2); + + // cleanup + service->removeEntries(entriesIdsAfter_1 << group_1->id()); + service->removeEntries(entriesIdsAfter_2 << group_2->id()); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCustomSortFake() +{ + QSharedPointer service = CaService::instance(); + CaEntry itemEntry_1; + itemEntry_1.setText("item_1"); + itemEntry_1.setEntryTypeName("collection"); + CaEntry groupEntry_1(GroupEntryRole); + groupEntry_1.setText("group_1"); + groupEntry_1.setEntryTypeName("collection"); + + QSharedPointer entry_1 = service->createEntry(itemEntry_1); + QSharedPointer entry_2 = service->createEntry(itemEntry_1); + QSharedPointer entry_3 = service->createEntry(itemEntry_1); + QSharedPointer entry_4 = service->createEntry(itemEntry_1); + QSharedPointer group_1 = service->createEntry(groupEntry_1); + + QList entriesIds; + entriesIds << entry_1->id() << entry_2->id() + << entry_3->id() << entry_4->id(); + service->appendEntriesToGroup(group_1->id(), entriesIds); + + CaQuery query; + query.setParentId(group_1->id()); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QList entriesIdsBefore = service->getEntryIds(query); + QVERIFY(entriesIds == entriesIdsBefore); + + entriesIds.clear(); + // fake list, not fulfilled correctly + for (int i(entriesIdsBefore.count()-1); i >= 0; i--) { + if (i%2) { + entriesIds.append(entriesIdsBefore.at(i)); + } + } + + QVERIFY(service->customSort(group_1->id(), entriesIds)); + QTest::qWait(500); + QList entriesIdsAfter = service->getEntryIds(query); + + QVERIFY(entriesIdsBefore != entriesIdsAfter); + QVERIFY(entriesIds != entriesIdsAfter); + + // cleanup + service->removeEntries(entriesIdsAfter << group_1->id()); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCustomSort() +{ + CaQuery collectionQuery; + collectionQuery.addEntryTypeName("collection"); + QSharedPointer service = CaService::instance(); + QList collectionIds = service->getEntryIds(collectionQuery); + QVERIFY(collectionIds.count()); + + const int groupId = collectionIds.at(0); + + CaQuery query; + query.setParentId(groupId); + query.setSort(DefaultSortAttribute, Qt::AscendingOrder); + + QList idsBefore = service->getEntryIds(query); + QVERIFY(idsBefore.count()); + + int first = idsBefore.takeFirst(); + idsBefore.append(first); + + // sort entries is group in custom order + QVERIFY(service->customSort(groupId, idsBefore)); + + // check results + QList idsAfter = service->getEntryIds(query); + QVERIFY(idsAfter.count()); + + QCOMPARE(idsAfter.count(),idsBefore.count()); + QCOMPARE(idsAfter, idsBefore); +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclient_remove.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_remove.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,275 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveItem() +{ + { + CaEntry item; + item.setText("testName"); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem1 = service->createEntry(item); + QVERIFY(!resultItem1.isNull()); + QVERIFY(!service->removeEntry(9999)); + QVERIFY(service->removeEntry(resultItem1->id())); + QCOMPARE(service->lastError() , NoErrorCode); + + QSharedPointer storageItem1 = service->getEntry(resultItem1->id()); + QVERIFY(storageItem1.isNull()); // entry not present in the storage + QVERIFY(!service->removeEntry(resultItem1->id())); + QVERIFY(service->lastError() != NoErrorCode); + + QSharedPointer resultItem2 = service->createEntry(item); + QVERIFY(!resultItem2.isNull()); + + QVERIFY(service->removeEntry(*resultItem2)); + QSharedPointer storageItem2 = service->getEntry(resultItem2->id()); + QVERIFY(storageItem2.isNull()); // entry not present in the storage + QVERIFY(!service->removeEntry(*resultItem2)); + + //cleanup + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveGroup() +{ + { + CaEntry group(GroupEntryRole); + group.setText("testName"); + group.setAttribute("attrName1", "attrVal1"); + group.setEntryTypeName("test"); + group.setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultgroup1 = service->createEntry(group); + QVERIFY(!resultgroup1.isNull()); + + QVERIFY(service->removeEntry(resultgroup1->id())); + QSharedPointer storagegroup1 = service->getEntry(resultgroup1->id()); + QVERIFY(!storagegroup1); // entry not present in the storage + QVERIFY(!service->removeEntry(resultgroup1->id())); + + QSharedPointer resultgroup2 = service->createEntry(group); + QVERIFY(!resultgroup2.isNull()); + + QVERIFY(service->removeEntry(*resultgroup2)); + QSharedPointer storagegroup2 = service->getEntry(resultgroup2->id()); + QVERIFY(!storagegroup2); // entry not present in the storage + QVERIFY(!service->removeEntry(*resultgroup2)); + + //cleanup + service->removeEntry(*resultgroup1); + service->removeEntry(*resultgroup2); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveItems() +{ + { + CaEntry item; + item.setText("testName"); + item.setAttribute("attrName1", "attrVal1"); + item.setEntryTypeName("test"); + item.setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem1 = service->createEntry(item); + QSharedPointer resultItem2 = service->createEntry(item); + QVERIFY(!resultItem1.isNull()); + QVERIFY(!resultItem2.isNull()); + + QList ids; + ids.append(resultItem1->id()); + ids.append(resultItem2->id()); + QVERIFY(service->removeEntries(ids)); + QSharedPointer storageItem1 = service->getEntry(resultItem1->id()); + QSharedPointer storageItem2 = service->getEntry(resultItem2->id()); + QVERIFY(storageItem1.isNull()); // entry not present in the storage + QVERIFY(storageItem2.isNull()); // entry not present in the storage + + QSharedPointer resultItem3 = service->createEntry(item); + QSharedPointer resultItem4 = service->createEntry(item); + QVERIFY(!resultItem3.isNull()); + QVERIFY(!resultItem4.isNull()); + + QList > entries; + entries.append(resultItem3); + entries.append(resultItem4); + + QVERIFY(service->removeEntries(entries)); + QSharedPointer storageItem3 = service->getEntry(resultItem3->id()); + QSharedPointer storageItem4 = service->getEntry(resultItem4->id()); + QVERIFY(storageItem3.isNull()); // entry not present in the storage + QVERIFY(storageItem4.isNull()); // entry not present in the storage + + //cleanup + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + service->removeEntry(*resultItem3); + service->removeEntry(*resultItem4); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveItemsFail() +{ + { + QSharedPointer item (new CaEntry()); + item->setText("testName"); + item->setAttribute("attrName1", "attrVal1"); + item->setEntryTypeName("test"); + item->setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultItem1 = service->createEntry(*item); + QVERIFY(!resultItem1.isNull()); + + QList ids; + ids.append(resultItem1->id()); + ids.append(9999);// not present in the storage + QVERIFY(!service->removeEntries(ids)); + QSharedPointer storageItem1 = service->getEntry(resultItem1->id()); + QVERIFY(!storageItem1.isNull()); // entry present in the storage + + QSharedPointer resultItem2 = service->createEntry(*item); + QVERIFY(!resultItem2.isNull()); + + QList > entries; + entries.append(resultItem2); + entries.append(item);//id not specified + + QVERIFY(!service->removeEntries(entries)); + QSharedPointer storageItem2 = service->getEntry(resultItem2->id()); + QVERIFY(storageItem2); // entry present in the storage + + //cleanup + service->removeEntry(*resultItem1); + service->removeEntry(*resultItem2); + + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveGroups() +{ + { + CaEntry group(GroupEntryRole); + group.setText("testName"); + group.setAttribute("attrName1", "attrVal1"); + group.setEntryTypeName("test"); + group.setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultGroup1 = service->createEntry(group); + QSharedPointer resultGroup2 = service->createEntry(group); + QVERIFY(!resultGroup1.isNull()); + QVERIFY(!resultGroup2.isNull()); + + QList ids; + ids.append(resultGroup1->id()); + ids.append(resultGroup2->id()); + QVERIFY(service->removeEntries(ids)); + QSharedPointer storageGroup1 = service->getEntry(resultGroup1->id()); + QSharedPointer storageGroup2 = service->getEntry(resultGroup2->id()); + QVERIFY(storageGroup1.isNull()); // entry not present in the storage + QVERIFY(storageGroup2.isNull()); // entry not present in the storage + + QSharedPointer resultGroup3 = service->createEntry(group); + QSharedPointer resultGroup4 = service->createEntry(group); + QVERIFY(!resultGroup3.isNull()); + QVERIFY(!resultGroup4.isNull()); + + QList > entries; + entries.append(resultGroup3); + entries.append(resultGroup4); + + QVERIFY(service->removeEntries(entries)); + QSharedPointer storageGroup3 = service->getEntry(resultGroup3->id()); + QSharedPointer storageGroup4 = service->getEntry(resultGroup4->id()); + QVERIFY(storageGroup3.isNull()); // entry not present in the storage + QVERIFY(storageGroup4.isNull()); // entry not present in the storage + + //cleanup + service->removeEntry(*resultGroup1); + service->removeEntry(*resultGroup2); + service->removeEntry(*resultGroup3); + service->removeEntry(*resultGroup4); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestRemoveGroupsFail() +{ + { + QSharedPointer group(new CaEntry(GroupEntryRole)); + group->setText("testName"); + group->setAttribute("attrName1", "attrVal1"); + group->setEntryTypeName("test"); + group->setFlags(RemovableEntryFlag); + + QSharedPointer service = CaService::instance(); + QSharedPointer resultGroup1 = service->createEntry(*group); + QVERIFY(!resultGroup1.isNull()); + + QList ids; + ids.append(resultGroup1->id()); + ids.append(9999);// not present in the storage + QVERIFY(!service->removeEntries(ids)); + QSharedPointer storageGroup1 = service->getEntry(resultGroup1->id()); + QVERIFY(!storageGroup1.isNull()); // entry present in the storage + + QSharedPointer resultGroup2 = service->createEntry(*group); + QVERIFY(!resultGroup2.isNull()); + + QList< QSharedPointer > entries; + entries.append(resultGroup2); + entries.append(group);//id not specified + + QVERIFY(!service->removeEntries(entries)); + QSharedPointer storageGroup2 = service->getEntry(resultGroup2->id()); + QVERIFY(!storageGroup2.isNull()); // entry present in the storage + + //cleanup + service->removeEntry(*resultGroup1); + service->removeEntry(*resultGroup2); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caclientnotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclientnotifier.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,145 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "t_caclientnotifier.h" +#include "caentry.h" +#include "canotifier.h" +#include "canotifierfilter.h" +#include "caservice.h" + +// ============================================================================ +TestCaClientNotifier::TestCaClientNotifier(): + mEntryId(0), + mGroupId(0), + mChangeType(AddChangeType), + mEntry(NULL), + mCount(0), + mEntryIds(new QList()), + mGroupIds(new QList()), + mChangeTypes(new QList()), + mEntries(new QList()), + mFilter(NULL), + mNotifier(NULL) +{ + +} +// ============================================================================ +TestCaClientNotifier::TestCaClientNotifier(const CaService &service, CaNotifierFilter *filter): + mEntryId(0), + mGroupId(0), + mChangeType(AddChangeType), + mEntry(NULL), + mCount(0), + mEntryIds(new QList()), + mGroupIds(new QList()), + mChangeTypes(new QList()), + mEntries(new QList()) +{ + if (!filter) { + mFilter = new CaNotifierFilter(); + mNotifier = service.createNotifier(*mFilter); + } else { + mFilter = NULL; + mNotifier = service.createNotifier(*filter); + } +} + +// ============================================================================ +void TestCaClientNotifier::clean() +{ + mEntryId = 0; + mGroupId = 0; + mChangeType = AddChangeType; + mCount = 0; + delete mEntryIds; + mEntryIds = new QList(); + delete mGroupIds; + mGroupIds = new QList(); + delete mChangeTypes; + mChangeTypes = new QList(); + delete mEntries; + mEntries = new QList(); + delete mEntry; + mEntry = NULL; +} +// ============================================================================ +TestCaClientNotifier::~TestCaClientNotifier() +{ + delete mEntry; + delete mFilter; + delete mNotifier; + delete mEntryIds; + delete mGroupIds; + delete mChangeTypes; + delete mEntries; + +} +// ============================================================================ +CaNotifier *TestCaClientNotifier::getNotifier() const +{ + return mNotifier; +} +// ============================================================================ +CaNotifierFilter *TestCaClientNotifier::getFilter() const +{ + return mFilter; +} +// ============================================================================ +void TestCaClientNotifier::entryChanged(int entryId, ChangeType changeType) +{ + mEntryId = entryId; + mChangeType = changeType; + mEntryIds->append(entryId); + mChangeTypes->append(changeType); + mEntries->append(NULL); + mGroupIds->append(0); + mCount++; +} +// ============================================================================ +void TestCaClientNotifier::entryChanged(const CaEntry &entry, ChangeType changeType) +{ + delete mEntry; + mEntry = new CaEntry(entry); + mEntryId = entry.id(); + mChangeType = changeType; + mEntryIds->append(entry.id()); + mChangeTypes->append(changeType); + mEntries->append(&entry); + mGroupIds->append(0); + mCount++; +} +// ============================================================================ +void TestCaClientNotifier::entryTouched(int id) +{ + mEntryId = id; + mEntryIds->append(id); + mChangeTypes->append(AddChangeType); + mEntries->append(NULL); + mGroupIds->append(0); + mCount++; +} +// ============================================================================ +void TestCaClientNotifier::groupContentChanged(int groupId) +{ + mGroupId = groupId; + mEntryIds->append(0); + mChangeTypes->append(AddChangeType); + mEntries->append(NULL); + mGroupIds->append(groupId); + mCount++; +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/src/t_caitemmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caitemmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,627 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +#include + +#include "caclient_defines.h" +#include "t_caclient.h" +#include "caservice.h" +#include "caquery.h" +#include "caitemmodel.h" +#include "caitemmodel_p.h" +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelConstruct() +{ + { + CaQuery query; + query.setEntryRoles(ItemEntryRole); + CaItemModel model(query,NULL); + QVERIFY(model.rowCount() > 0); + QCOMPARE(model.columnCount(),1); + QCOMPARE(model.isAutoUpdate(), true); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelAutoUpdate() +{ + { + // ensure that entries are not present in a storage + removeEntry("TestGroup"); + removeEntry("TestItem1"); + removeEntry("TestItem2"); + //test + QSharedPointer group = createGroup("TestGroup","testfolder"); + QSharedPointer item1 = createItem("TestItem1","testitem"); + QSharedPointer item2 = createItem("TestItem2","testitem"); + addItemToGroup(group->id(), item1->id()); + CaQuery query; + query.setParentId(group->id()); + CaItemModel model(query,NULL); + model.setAutoUpdate(true); + QCOMPARE(model.isAutoUpdate(), true); + QCOMPARE(model.rowCount() , 1); + addItemToGroup(group->id(), item2->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount() , 2); + removeItemFromGroup(group->id(), item2->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount() , 1); + model.setAutoUpdate(false); + addItemToGroup(group->id(), item2->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount() , 1); + QCOMPARE(model.isAutoUpdate(), false); + model.updateModel(); + QCOMPARE(model.rowCount() , 2); + QCOMPARE(model.isAutoUpdate(), false); + model.setAutoUpdate(true); + removeEntry(item1->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount() , 1); + //cleanup + removeEntry("TestItem2"); + removeEntry("TestItem1"); + removeEntry("TestGroup"); + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelIndex() +{ + // ensure that entries are not present in a storage + removeEntry("TestGroup"); + removeEntry("TestItem1"); + removeEntry("TestItem2"); + //test + QSharedPointer group = createGroup("TestGroup","testfolder"); + QSharedPointer item1 = createItem("TestItem1","testitem"); + QSharedPointer item2 = createItem("TestItem2","testitem"); + addItemToGroup(group->id(), item1->id()); + addItemToGroup(group->id(), item2->id()); + CaQuery query; + query.setParentId(group->id()); + CaItemModel model(query,NULL); + QCOMPARE(model.index(-1), QModelIndex()); + QCOMPARE(model.index(0).row(), 0); + QCOMPARE(model.index(1).row(), 1); + QCOMPARE(model.index(2), QModelIndex()); + QCOMPARE(model.parent(model.index(1)), QModelIndex()); + QCOMPARE(model.root().row(),0); + QCOMPARE(model.root().column(),1); + + CaQuery query2; + CaItemModel modelWithoutParent(query2,NULL); + QCOMPARE(modelWithoutParent.root().isValid(),false); + + //cleanup + removeEntry("TestItem2"); + removeEntry("TestItem1"); + removeEntry("TestGroup"); + +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelData() +{ + // ensure that entries are not present in a storage + removeEntry("TestGroup"); + removeEntry("TestItem1"); + //test + QSharedPointer group = createGroup("TestGroup","testfolder"); + QSharedPointer item1 = createItem("TestItem1","TestDescription","testitem", UsedEntryFlag); + QString progressString = "100"; + item1->setAttribute(UNINSTALL_PROGRESS_APPLICATION_ATTRIBUTE_NAME, progressString); + QSharedPointer service = CaService::instance(); + service->updateEntry(*item1.data()); + QCOMPARE(item1->attribute(UNINSTALL_PROGRESS_APPLICATION_ATTRIBUTE_NAME), progressString); + + addItemToGroup(group->id(), item1->id()); + CaQuery query; + query.setParentId(group->id()); + CaItemModel model(query,NULL); + + QCOMPARE(model.data(QModelIndex()),QVariant()); + + QModelIndex index = model.index(0); + + model.setSecondLineVisibility(false); + QCOMPARE(model.secondLineVisibility(),false); + QCOMPARE(model.data(index, Qt::DisplayRole).toString(), QString("TestItem1")); + model.setSecondLineVisibility(true); + QCOMPARE(model.secondLineVisibility(),true); + QList displayRoleList = model.data(index, Qt::DisplayRole).toList(); + QString text = displayRoleList.at(0).toString(); + QString description = displayRoleList.at(1).toString(); + QCOMPARE(text,QString("TestItem1")); + QCOMPARE(description,QString("TestDescription")); + QCOMPARE(model.data(index, CaItemModel::IdRole).toInt(), item1->id()); + QCOMPARE(model.data(index, CaItemModel::TypeRole).toString(),QString("testitem")); + QVERIFY(model.data(index, CaItemModel::FlagsRole).value()== UsedEntryFlag); + QCOMPARE(model.data(index, CaItemModel::TextRole).toString(),QString("TestItem1")); + QCOMPARE(model.entry(index)->text(),QString("TestItem1")); + QCOMPARE(model.data(index, 777), QVariant(QVariant::Invalid)); + QCOMPARE(model.data(index, CaItemModel::UninstalRole).value(), progressString.toInt()); + + //cleanup + removeEntry("TestItem1"); + removeEntry("TestGroup"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelIconSize() +{ + // ensure that entries are not present in a storage + removeEntry("TestGroup"); + removeEntry("TestItem1"); + //test + QSharedPointer group = createGroup("TestGroup","testfolder"); + QSharedPointer item1 = createItem("TestItem1","testitem"); + addItemToGroup(group->id(), item1->id()); + CaQuery query; + query.setParentId(group->id()); + CaItemModel model(query,NULL); + QSizeF size1(30,30); + QSizeF size2(130,130); + model.setIconSize(size1); + QVERIFY(model.getIconSize() == size1); + model.setIconSize(size2); + QVERIFY(model.getIconSize() == size2); + //cleanup + removeEntry("TestItem1"); + removeEntry("TestGroup"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelChangeParent() +{ + // ensure that entries are not present in a storage + removeEntry("TestGroup1"); + removeEntry("TestGroup2"); + removeEntry("TestItem1"); + removeEntry("TestItem2"); + removeEntry("TestItem3"); +//test + QSharedPointer group1 = createGroup("TestGroup1","testfolder"); + QSharedPointer group2 = createGroup("TestGroup2","testfolder"); + QSharedPointer item1 = createItem("TestItem1","testitem"); + QSharedPointer item2 = createItem("TestItem2","testitem"); + QSharedPointer item3 = createItem("TestItem3","testitem"); + addItemToGroup(group1->id(), item1->id()); + addItemToGroup(group2->id(), item2->id()); + addItemToGroup(group2->id(), item3->id()); + CaQuery query; + query.setParentId(group1->id()); + CaItemModel model(query,NULL); + model.setAutoUpdate(true); + QCOMPARE(model.isAutoUpdate(), true); + QCOMPARE(model.rowCount() , 1); + QCOMPARE(itemName(model,0),QString("TestItem1")); + model.setFlagsOn(VisibleEntryFlag); + model.setFlagsOff(MissingEntryFlag); + model.setParentId(group2->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount() , 2); + QCOMPARE(itemName(model,0),QString("TestItem2")); + QCOMPARE(itemName(model,1),QString("TestItem3")); + model.setParentId(group1->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount() , 1); + QCOMPARE(itemName(model,0),QString("TestItem1")); + model.setAutoUpdate(false); + model.setFlagsOn(VisibleEntryFlag); + model.setFlagsOff(MissingEntryFlag); + model.setParentId(group2->id()); + QTest::qWait(50); + QCOMPARE(model.rowCount(), 2); + QCOMPARE(itemName(model,0),QString("TestItem2")); + QCOMPARE(itemName(model,1),QString("TestItem3")); + + //cleanup + removeEntry("TestItem3"); + removeEntry("TestItem2"); + removeEntry("TestItem1"); + removeEntry("TestGroup2"); + removeEntry("TestGroup1"); + +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelSortOrder() +{ + // ensure that entries are not present in a storage + removeEntry("TestGroup"); + removeEntry("ATestItem"); + removeEntry("BTestItem"); + //test + QSharedPointer group = createGroup("TestGroup","testfolder"); + QSharedPointer item1 = createItem("ATestItem","testitem"); + QSharedPointer item2 = createItem("BTestItem","testitem"); + addItemToGroup(group->id(), item2->id()); + addItemToGroup(group->id(), item1->id()); + CaQuery query; + query.setParentId(group->id()); + CaItemModel model(query,NULL); + model.setAutoUpdate(false); //should work even without autoupdate + model.setSort(NameSortAttribute, Qt::DescendingOrder); + QCOMPARE(itemName(model,0),QString("BTestItem")); + QCOMPARE(itemName(model,1),QString("ATestItem")); + model.setSort(NameSortAttribute, Qt::AscendingOrder); + QCOMPARE(itemName(model,0),QString("ATestItem")); + QCOMPARE(itemName(model,1),QString("BTestItem")); + model.setSort(DefaultSortAttribute, Qt::DescendingOrder); + QCOMPARE(itemName(model,0),QString("ATestItem")); + QCOMPARE(itemName(model,1),QString("BTestItem")); + model.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QCOMPARE(itemName(model,0),QString("BTestItem")); + QCOMPARE(itemName(model,1),QString("ATestItem")); + model.setAutoUpdate(true); + model.setSort(NameSortAttribute, Qt::DescendingOrder); + QCOMPARE(itemName(model,0),QString("BTestItem")); + QCOMPARE(itemName(model,1),QString("ATestItem")); + model.setSort(NameSortAttribute, Qt::AscendingOrder); + QCOMPARE(itemName(model,0),QString("ATestItem")); + QCOMPARE(itemName(model,1),QString("BTestItem")); + model.setSort(DefaultSortAttribute, Qt::DescendingOrder); + QCOMPARE(itemName(model,0),QString("ATestItem")); + QCOMPARE(itemName(model,1),QString("BTestItem")); + model.setSort(DefaultSortAttribute, Qt::AscendingOrder); + QCOMPARE(itemName(model,0),QString("BTestItem")); + QCOMPARE(itemName(model,1),QString("ATestItem")); + //cleanup + removeEntry("BTestItem"); + removeEntry("ATestItem"); + removeEntry("TestGroup"); + +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelUpdateItem() +{ + // ensure that entries are not present in a storage + removeEntry("TestItemBeforeUpdate"); + removeEntry("TestItemAfterUpdate"); + removeEntry("TestItemAfterSecondUpdate"); + //test + CaQuery query; + query.addEntryTypeName("test_item"); + CaItemModel model(query,NULL); + model.setAutoUpdate(true); + QSharedPointer item1 = createItem("TestItemBeforeUpdate","test_item"); + QTest::qWait(50); + QCOMPARE(model.rowCount(),1); + QCOMPARE(itemName(model,0),QString("TestItemBeforeUpdate")); + item1->setText("TestItemAfterUpdate"); + CaService::instance()->updateEntry(*item1); + QTest::qWait(50); + QCOMPARE(model.rowCount(),1); + QCOMPARE(itemName(model,0),QString("TestItemAfterUpdate")); + model.setAutoUpdate(false); + item1->setText("TestItemAfterSecondUpdate"); + CaService::instance()->updateEntry(*item1); + QTest::qWait(50); + QCOMPARE(model.rowCount(),1); + QCOMPARE(itemName(model,0),QString("TestItemAfterUpdate"));// model not updated + + //cleanup + removeEntry("TestItemBeforeUpdate"); + removeEntry("TestItemAfterUpdate"); + removeEntry("TestItemAfterSecondUpdate"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelAddItems() +{ + QSharedPointer service = CaService::instance(); + + // ensure that entries are not present in a storage + removeEntry("TestGroup"); + + removeEntry("1TestItem1"); + removeEntry("1TestItem2"); + removeEntry("1TestItem3"); + + removeEntry("2TestItem1"); + + removeEntry("3TestItem1"); + removeEntry("3TestItem2"); + removeEntry("3TestItem3"); + + removeEntry("0TestItem1"); + removeEntry("0TestItem2"); + + removeEntry("1TestItem4"); + removeEntry("1TestItem5"); + + removeEntry("2TestItem2"); + removeEntry("2TestItem3"); + + removeEntry("3TestItem4"); + removeEntry("3TestItem5"); + + // test group + QSharedPointer testGroup = createGroup("TestGroup","testfolder"); + + // test entries + QList< QSharedPointer > entryList; + entryList << createItem("1TestItem1","testitem"); + entryList << createItem("1TestItem2","testitem"); + entryList << createItem("1TestItem3","testitem"); + + entryList << createItem("2TestItem1","testitem"); + + entryList << createItem("3TestItem1","testitem"); + entryList << createItem("3TestItem2","testitem"); + entryList << createItem("3TestItem3","testitem"); + + // entries for inserting into sorted order - notice the names + entryList << createItem("0TestItem1","testitem"); + entryList << createItem("0TestItem2","testitem"); + + entryList << createItem("1TestItem4","testitem"); + entryList << createItem("1TestItem5","testitem"); + + entryList << createItem("2TestItem2","testitem"); + entryList << createItem("2TestItem3","testitem"); + + entryList << createItem("3TestItem4","testitem"); + entryList << createItem("3TestItem5","testitem"); + + // create a model to test + CaQuery query; + query.setParentId(testGroup->id()); + CaItemModel model(query, NULL); + model.setAutoUpdate(true); + + // create row insertion signal spyes; + qRegisterMetaType("QModelIndex"); + QSignalSpy rowsAboutToBeInsertedSpy( + &model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); + QSignalSpy rowsInsertedSpy( + &model, SIGNAL(rowsInserted(QModelIndex,int,int))); + QSignalSpy resetSpy( + &model, SIGNAL(modelReset())); + QList spyArguments; + +// ***[1]*** test adding 3 entries to an empty collection + service->appendEntriesToGroup(*testGroup, entryList.mid(0, 3)); + QTest::qWait(50); + + QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); + spyArguments = rowsAboutToBeInsertedSpy.takeFirst(); + // added 3 entries to the beginning of the group + // first row in the signal should be 0 and the last row 2 + QVERIFY(spyArguments.at(1).toInt() == 0); + QVERIFY(spyArguments.at(2).toInt() == 2); + + QCOMPARE(rowsInsertedSpy.count(), 1); + spyArguments = rowsInsertedSpy.takeFirst(); + QVERIFY(spyArguments.at(1).toInt() == 0); + QVERIFY(spyArguments.at(2).toInt() == 2); + +// ***[2]*** add 1 entry to a collection already containing items + service->appendEntryToGroup(*testGroup, *entryList[3]); + QTest::qWait(50); + + QCOMPARE(resetSpy.count(), 1); + +// ***[5]*** rearrange items + model.setSort(DefaultSortAttribute); + + QSignalSpy layoutAboutToBeChangedSpy(&model, SIGNAL(layoutAboutToBeChanged())); + QSignalSpy layoutChangedSpy(&model, SIGNAL(layoutChanged())); + + QList idList; + QSharedPointer entry; + foreach(entry, entryList) { + idList << entry->id(); + } + // swap the first and last element to trigger a layout update + idList.swap(0, idList.count() - 1); + + service->customSort(testGroup->id(), idList); + QTest::qWait(50); + + QCOMPARE(layoutAboutToBeChangedSpy.count(), 1); + QCOMPARE(layoutChangedSpy.count(), 1); + + + removeEntry("1TestItem1"); + removeEntry("1TestItem2"); + removeEntry("1TestItem3"); + removeEntry("2TestItem1"); + removeEntry("3TestItem1"); + removeEntry("3TestItem2"); + removeEntry("3TestItem3"); + removeEntry("0TestItem1"); + removeEntry("0TestItem2"); + removeEntry("1TestItem4"); + removeEntry("1TestItem5"); + removeEntry("2TestItem2"); + removeEntry("2TestItem3"); + removeEntry("3TestItem4"); + removeEntry("3TestItem5"); + removeEntry("TestGroup"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::TestCaItemModelEmptySignal() +{ + QSharedPointer service = CaService::instance(); + + // ensure that entries are not present in a storage + removeEntry("TestGroup_EmptySignal"); + removeEntry("TestItem1"); + removeEntry("TestItem2"); + // test group + QSharedPointer testGroup = createGroup("TestGroup_EmptySignal","testfolder"); + + // test entries + QSharedPointer entry1 = createItem("TestItem1","testitem"); + QSharedPointer entry2 = createItem("TestItem2","testitem"); + + // create a model to test + CaQuery query; + query.setParentId(testGroup->id()); + CaItemModel model(query, NULL); + + // create signal spyes; + //qRegisterMetaType("QModelIndex"); + QSignalSpy emptySignalSpy( + &model, SIGNAL(empty(bool))); + QList spyArguments; + + //test + service->appendEntryToGroup(*testGroup.data(), *entry1.data()); + QTest::qWait(50); + QCOMPARE(emptySignalSpy.count(),1); + + spyArguments = emptySignalSpy.takeAt(0); + QCOMPARE(spyArguments.at(0).toBool(), false); + spyArguments.clear(); + emptySignalSpy.clear(); + + service->appendEntryToGroup(*testGroup.data(), *entry2.data()); + QTest::qWait(50); + QCOMPARE(emptySignalSpy.count(),0); + removeEntry("TestItem1"); + QTest::qWait(50); + QCOMPARE(emptySignalSpy.count(),0); + removeEntry("TestItem2"); + QTest::qWait(50); + QCOMPARE(emptySignalSpy.count(),1); + + spyArguments = emptySignalSpy.takeAt(0); + QCOMPARE(spyArguments.at(0).toBool(), true); + + + //cleanup + removeEntry("TestGroup_EmptySignal"); +} + +// --------------------------------------------------------------------------- +// UTILS +// --------------------------------------------------------------------------- +// +QSharedPointer TestCaClient::createGroup(const QString &groupName, const QString &typeName) +{ + CaEntry item(GroupEntryRole); + item.setText(groupName); + item.setEntryTypeName(typeName); + QSharedPointer service = CaService::instance(); + return service->createEntry(item); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +QSharedPointer TestCaClient::createItem(const QString &itemName, const QString &description, + const QString &typeName, EntryFlags flags) +{ + CaEntry item(ItemEntryRole); + item.setText(itemName); + item.setDescription(description); + item.setEntryTypeName(typeName); + item.setFlags(flags); + QSharedPointer service = CaService::instance(); + return service->createEntry(item); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +QSharedPointer TestCaClient::createItem(const QString &itemName, const QString &typeName) +{ + CaEntry item(ItemEntryRole); + item.setText(itemName); + item.setEntryTypeName(typeName); + QSharedPointer service = CaService::instance(); + return service->createEntry(item); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::addItemToGroup(int groupId, int itemId) +{ + QSharedPointer service = CaService::instance(); + service->appendEntryToGroup(groupId, itemId) ; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::removeItemFromGroup(int groupId, int itemId) +{ + QSharedPointer service = CaService::instance(); + service->removeEntryFromGroup(groupId, itemId) ; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaClient::removeEntry(int entryId) +{ + QSharedPointer service = CaService::instance(); + service->removeEntry(entryId); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +bool TestCaClient::removeEntry(const QString &entryName) +{ + bool found(false); + QSharedPointer service = CaService::instance(); + CaQuery query; + QList< QSharedPointer > entries = service->getEntries(query); + foreach(QSharedPointer entry, entries) { + if (entry->text() == entryName) { + service->removeEntry(*entry); + found = true; + } + } + return found; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +QString TestCaClient::itemName(const CaItemModel &model, int row) +{ + return model.data(model.index(row),CaItemModel::TextRole).toString(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/t_caclient.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/t_caclient.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +# +# 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: +# + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp +symbian: +{ + HEADERS += ../../../tsrc/testutils/inc/*.h + SOURCES += ../../../tsrc/testutils/src/*.cpp + SOURCES += ../../../srvsrc/castorageproxy.cpp + SOURCES += ../../../srvsrc/cabackupnotifier.cpp + SOURCES += ../../../castorage/src/*.cpp + + + BLD_INF_RULES.prj_testexports += "data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caclient/installs/sapiapp_S60_3_X_v_1_0_0.sisx" + BLD_INF_RULES.prj_exports += "data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caclient/installs/sapiapp_S60_3_X_v_1_0_0.sisx" +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/t_caclient.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/t_caclient.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,113 @@ +# +# 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: +# + +TEMPLATE = app +CONFIG += hb mobility +MOBILITY = serviceframework +HB = hbcore +include(../../../../common.pri) +include(../../../tsrc/testutils/testutils.pri) +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib xml + +DEFINES += CONTENTARSENAL_UNITTEST +DEFINES += CONTENT_ARSENAL_STORAGE_UT + +coverage:DEFINES += COVERAGE_MEASUREMENT +DEPENDPATH += . \ + ./inc \ + ./src +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../homescreensrv_plat/contentstorage_api \ + ../../../srvinc \ + ../../../inc \ + ../../../cautils\inc \ + ../../../castorage/inc \ + ../../../../contentstorage/inc + + +INCLUDEPATH += ../../../cautils/inc \ + ../../inc + +LIBS += -lcaclient + +symbian: { + CONFIG += symbian_test + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + coverage: { + SUBDIRS += ../../../cautils + + SUBDIRS += ../../../caclient + + BLD_INF_RULES.prj_mmpfiles += "../../../casrv/casrvmgr/group/casrvmanager.mmp" \ + "../../../casatinterface/group/MenuInterface.mmp" \ + "../../../group/casathandler.mmp" \ + "../../../group/camenu.mmp" \ + "../../../group/camenusrv.mmp" " + + CONFIG -= symbian_test + } + + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0x20026FA8 + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + + LIBS += \ + -lapgrfx \ + -lefsrv \ + -lws32 \ + -lcautils \ + -lsqldb \ + -lbafl \ + -lflogger \ + -lsysutil + + export.sources = ./data/armv5/*.sisx + export.path = /testing/data/t_caclient/installs + + exportDB.sources = ./data/castorage.db + exportDB.path = /testing/data/t_caclient/ + + exportQM.sources = ./data/emailTest.qm + exportQM.path = /resource/qt/translations/ + + + DEPLOYMENT += export \ + exportDB \ + exportQM + +} + +include(t_caclient.pri) +!win32:include(t_caclient_installs_win32.pri) +!symbian:unix:include(t_caclient_installs_unix.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/t_caclient_installs_unix.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/t_caclient_installs_unix.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +# +# 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: +# +# + +# Release - deploy only release version of the tests + +# + + + +r01.path = ../../../../bin/hstests + +r01.files = ./release/t_hsmcsserviceprovider \ + + + +INSTALLS += r01 \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/t_caclient_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/t_caclient_installs_win32.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +# +# 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: +# + +testfiles.path = ../../../../../bin/debug/ + +testfiles.files = ./release/t_caclient.exe \ + +testfiles.files = ./debug/t_caclient.exe + +INSTALLS += testfiles + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_caclient/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_caclient/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_caclient.exe -o c:\t_caclient.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_testapp/catestapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_testapp/catestapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = catestapp + +CONFIG(debug, debug|release) { + LIBS += -L../debug \ + -lcaclient +} +else { + LIBS += -L../release \ + -lcaclient + +} + + + +QT += core gui +CONFIG += hb + +SOURCES += main.cpp + +DEPENDPATH += ./../inc +INCLUDEPATH += ./../inc \ + ../../../homescreensrv_plat/contentstorage_api + +win32:include(installs_win32.pri) + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_testapp/installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_testapp/installs_win32.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +# +# Release +# +r01.path = ../../../bin/release +r01.files = ./release/*.exe + +INSTALLS += r01 + +# +# Debug +# +d01.path = ../../../bin/debug +d01.files = ./debug/*.exe + +INSTALLS += d01 + +# +# test DB +# +testdb.path = ../../../bin/debug +testdb.files = ./castorage.db + +INSTALLS += testdb + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/t_testapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/t_testapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,104 @@ +/* +* 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 +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "caservice.h" +#include "caentry.h" +#include "caquery.h" + +QStandardItemModel *populateModel() +{ + QStandardItemModel *result = new QStandardItemModel(); + + + QList items; + + for (int i = 0; i < 10; ++i) { + //items << new QStandardItem(QString("Item %1").arg(i+1)); + } + QSharedPointer service = CaService::instance(); + + //QList entryList = service->getEntries(QList() << 1 << 3 << 4); + CaQuery query; + query.setParentId(2); + QList< QSharedPointer > entryList = service->getEntries(query); + foreach(QSharedPointer entry, entryList) { + items << new QStandardItem(entry->makeIcon(), entry->text()); + } + result->appendColumn(items); + + return result; +} + + +int main(int argc, char *argv[]) +{ + // Each Orbit UI application needs to instantiate HbApplication. + // It is the core part of an Orbit UI application. + // Note: HbApplication is a specialisation of Qt's QApplication + // so your Orbit application does not need to instantiate a + // QApplication as well. + HbApplication app(argc, argv); + + // HbMainWindow contains all your application's screen elements + // such as widgets and views. + // Also, the decorators that make up the standard Orbit UI style + // (e.g. indicators, softkeys, menus) are automatically created + // when this class is instantiated. + HbMainWindow mainWindow; + + + + HbGridView *grid = new HbGridView(); + grid->setParent(&app); + + //QStandardItemModel* model = populateModel; + grid->setModel(populateModel()); + + HbView *view = new HbView(); + view->setParent(&app); + view->setTitle("Test CA app"); + view->setWidget(grid); + + // Add the label widget to the HbMainWindow as a view. + mainWindow.addView(view); + + HbMenu *menu = new HbMenu(); + menu->addAction(QString("Exit application"), qApp, SLOT(quit())); + mainWindow.currentView()->setMenu(menu); + + // Show the current view. There is only one view which happens to contain + // only a single widget, i.e. the label with the "Hello World" text, so + // that is what will be shown. + mainWindow.show(); + + // Start the standard Qt application event processing loop. + // In this application the only possible user interaction is to + // press the "back" button that was automatically added to + // the HbMainWindow. + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/caclient/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +TEMPLATE = subdirs +SUBDIRS = ./t_caclient + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/resource/caapphandlerplugin.xml --- a/contentstorage/cahandler/app/resource/caapphandlerplugin.xml Thu Sep 02 20:45:03 2010 +0300 +++ b/contentstorage/cahandler/app/resource/caapphandlerplugin.xml Thu Sep 16 12:11:40 2010 +0100 @@ -10,4 +10,4 @@ application - + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/data/armv5/Hello.jar Binary file contentstorage/cahandler/app/tsrc/t_caapphandler/data/armv5/Hello.jar has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX Binary file contentstorage/cahandler/app/tsrc/t_caapphandler/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/data/winscw/Hello.jar Binary file contentstorage/cahandler/app/tsrc/t_caapphandler/data/winscw/Hello.jar has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx Binary file contentstorage/cahandler/app/tsrc/t_caapphandler/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/inc/T_caapphandlerplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/inc/T_caapphandlerplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,72 @@ +/* +* 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: +* +*/ +/* + * T_cahandler.h + * + * Created on: 2009-09-16 + * Author: + */ + +#ifndef T_CAAPPHANDLERPLUGIN_H +#define T_CAAPPHANDLERPLUGIN_H + +class CaAppHandler; + +#include +#include +#include + +//------------------------------------------------------------------------------ + + +/** + * + * Test class. + * + */ +class T_CaHandler: public QObject +{ + Q_OBJECT +public: + T_CaHandler(); +private slots: + + //setup methods + void initTestCase(); + void cleanup(); + + void appHandlerConstruction(); + void appHandlerMultipleLoad(); + void appHandlerMultipleLoadAndDelete(); + void appHandlerOpenFails(); + void appHandlerRemoveFails(); + void appHandlerClose(); + void appHandlerRunApplication(); + + void appHandlerRemoveApplication(); + void appHandlerRemoveJavaApplication(); + + void testCCaTaskList(); + void appHandlerCreateInstance(); +private: + TBool javaAppInstalled(TInt32 aUid); + +private: + CaAppHandler *iAppHandler; +}; + +#endif // T_CAAPPHANDLERPLUGIN_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006-2006 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: Plugin Interface +* +*/ + + +#ifndef C_WAITACTIVE_H +#define C_WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // C_WAITACTIVE_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_caapphandler_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/src/T_caapphandlerplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/src/T_caapphandlerplugin.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,523 @@ +/* +* 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: +* +*/ +/* + * T_caapphandlerplugin.cpp + * + * Created on: 2009-09-16 + * Author: + */ + +// CLASS HEADER + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "T_caapphandlerplugin.h" +#include "waitactive.h" +#include "catasklist.h" +#include "caapphandler.h" +#include "caapphandlerplugin.h" +#include "caentry.h" +#include "caclient_defines.h" +#include "t_cainstaller.h" + +template +struct RClassDeleter +{ + static inline void cleanup(RClass *ptr) + { + ptr->Close(); + } +}; + + +typedef RClassDeleter< RBuf > RBufDeleter; +typedef QScopedPointer< RBuf, RBufDeleter > + RBufPointer; + + +QTM_USE_NAMESPACE + +static const char caTypeApp[] = "application"; +static const char caTypePackage[] = "package"; +static const char caTypeWidget[] = "widget"; +static const char caAttrView[] = "view"; +static const char caCmdClose[] = "close"; +static const char caAttrWindowGroupId[] = "window_group_id"; +static const char caAttrComponentId[] = "component_id"; +static const char caUidAttribute[] = "application:uid"; + +T_CaHandler::T_CaHandler(): + iAppHandler(NULL) +{ +} + +void T_CaHandler::cleanup() +{ + delete iAppHandler; + iAppHandler = NULL; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CaHandler::initTestCase() +{ + QStringList pluginPaths; + QString xmlName("caapphandlerplugin.xml"); + + pluginPaths.append("c:/resource/qt/plugins/commandhandler"); + pluginPaths.append("z:/resource/qt/plugins/commandhandler"); + + QServiceManager serviceManager; + foreach (QString path, pluginPaths) { + QApplication::addLibraryPath(path); + QDir dir(path); + if (dir.exists(xmlName)) { + serviceManager.addService(dir.absoluteFilePath(xmlName)); + } + } + + Usif::RSoftwareInstall sif; + CleanupClosePushL( sif ); + User::LeaveIfError( sif.Connect() ); + + // Install the component + _LIT16( KHelloJarPath, "c:\\testing\\data\\t_caapphandler\\installs\\hello.jar" ); + Usif::COpaqueNamedParams* arguments = NULL; + Usif::COpaqueNamedParams* results = NULL; + arguments = Usif::COpaqueNamedParams::NewLC(); + results = Usif::COpaqueNamedParams::NewLC(); + arguments->AddIntL( Usif::KSifInParam_InstallSilently, 1 ); + TRequestStatus status; + sif.Install( KHelloJarPath, *arguments, *results, status, EFalse ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + + CleanupStack::PopAndDestroy( results ); + CleanupStack::PopAndDestroy( arguments ); + + // Disconnect from the SIF server + CleanupStack::PopAndDestroy( &sif ); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerConstruction() +{ + iAppHandler = new CaAppHandler(); + QVERIFY(iAppHandler); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerMultipleLoad() +{ + RPointerArray handlerArray; + + bool foundNull(false); + TRAPD(err, + CleanupResetAndDestroyPushL(handlerArray); + for (TInt i(0); i < 10; ++i) { + handlerArray.AppendL(new CaAppHandler()); + if (handlerArray[i] == 0) { + foundNull = true; + break; + } + } + CleanupStack::PopAndDestroy(&handlerArray); + ); + QCOMPARE(err, KErrNone); + QVERIFY(!foundNull); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerMultipleLoadAndDelete() +{ + CaAppHandler *handlerPtr(NULL); + for (TInt i(0); i < 10; ++i) { + handlerPtr = new CaAppHandler(); + delete handlerPtr; + handlerPtr = NULL; + } +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerOpenFails() +{ + appHandlerConstruction(); + + TInt unsuportedCommandResult(KErrNone); + TInt unexistingEntryOpenResult(KErrNone); + TInt corruptedEntryOpenResult(KErrNone); + TInt unsupportedEntryTypeOpenResult(KErrNone); + + CaEntry *entry = new CaEntry(); + + // valid entry type name + entry->setEntryTypeName(caTypeApp); + + unsuportedCommandResult = + iAppHandler->execute(*entry, "unsupported_command_name"); + // invalid UID + entry->setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, "11111"); + + unexistingEntryOpenResult = iAppHandler->execute(*entry, caCmdOpen); + + // invalid view ID + entry->setAttribute(caAttrView, "not_a_hex_value"); + + corruptedEntryOpenResult = iAppHandler->execute(*entry, caCmdOpen); + + // invalid entry type name + entry->setEntryTypeName("unsupported_entry_type_name"); + + unsupportedEntryTypeOpenResult = + iAppHandler->execute(*entry, caCmdOpen); + + delete entry; + entry = NULL; + QCOMPARE(unsuportedCommandResult, KErrNotSupported); + QCOMPARE(unexistingEntryOpenResult, KErrNotFound); + QCOMPARE(corruptedEntryOpenResult, KErrGeneral); + QCOMPARE(unsupportedEntryTypeOpenResult, KErrNotSupported); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerRemoveFails() +{ + appHandlerConstruction(); + TInt unpermittedRemovalResult(KErrNone); + TInt unexistingEntryRemovalResult(KErrNone); + + CaEntry *entry = new CaEntry(); + entry->setEntryTypeName(caTypeApp); + + // invalid flags (should be removable) + entry->setFlags(0); + + unpermittedRemovalResult = + iAppHandler->execute(*entry, caCmdRemove); + + // set correct flags + entry->setFlags(RemovableEntryFlag); + + // invalid UID + entry->setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, "0"); + + unexistingEntryRemovalResult = + iAppHandler->execute(*entry, caCmdRemove); + delete entry; + entry = NULL; + + QCOMPARE(unpermittedRemovalResult, KErrAccessDenied); + QCOMPARE(unexistingEntryRemovalResult, KErrNotFound); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerClose() +{ + TInt errorClose1(KErrNone); + TInt errorClose2(KErrNone); + TInt errorOpen(KErrNone); + bool wasRunning(false); + bool closedRunning(false); + + const TInt KPhonebookUid(0x20022EF9); + + RWsSession wsSession; + TRAPD(err, + CleanupClosePushL(wsSession); + User::LeaveIfError(wsSession.Connect()); + + TApaTaskList taskList(wsSession); + TApaTask taskBefore = taskList.FindApp(TUid::Uid(KPhonebookUid)); + if (taskBefore.Exists()) { + taskBefore.EndTask(); + } + + appHandlerConstruction(); + + CaEntry *entry = new CaEntry(); + entry->setEntryTypeName(caTypeApp); + entry->setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(KPhonebookUid, 10)); + + errorClose1 = iAppHandler->execute(*entry, caCmdClose); + QTest::qWait(10000); + errorOpen = iAppHandler->execute(*entry, caCmdOpen); + + QTest::qWait(10000); + TApaTask taskAfter = taskList.FindApp(TUid::Uid(KPhonebookUid)); + TInt id = taskAfter.WgId(); + QString numBuf; + numBuf = QString::number(id); + entry->setFlags(entry->flags() | RunningEntryFlag); + entry->setAttribute(caAttrWindowGroupId, numBuf); + + wasRunning = taskAfter.Exists(); + + errorClose2 = iAppHandler->execute(*entry, caCmdClose); + + QTest::qWait(10000); + closedRunning = !taskList.FindApp(TUid::Uid(KPhonebookUid)).Exists(); + delete entry; + entry = NULL; + CleanupStack::PopAndDestroy(&wsSession); + ); + QCOMPARE(err, KErrNone); + QCOMPARE(errorClose1, KErrGeneral); + QCOMPARE(errorOpen, KErrNone); + QCOMPARE(errorClose2, KErrNone); + QVERIFY(wasRunning); + QVERIFY(closedRunning); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerRunApplication() +{ + + TInt error(KErrNone); + bool started(false); + // we will run calculator app + const TInt KPhonebookUid(0x20022EF9); + + RWsSession wsSession; + + TRAPD(err, + CleanupClosePushL(wsSession); + User::LeaveIfError(wsSession.Connect()); + + TApaTaskList taskList(wsSession); + TApaTask taskBefore = taskList.FindApp(TUid::Uid(KPhonebookUid)); + if (taskBefore.Exists()) { + taskBefore.EndTask(); + } + + appHandlerConstruction(); + + CaEntry *entry = new CaEntry(); + entry->setEntryTypeName(caTypeApp); + entry->setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(KPhonebookUid)); + + error = iAppHandler->execute(*entry, caCmdOpen); + + QTest::qWait(1000); + TApaTask taskAfter = taskList.FindApp(TUid::Uid(KPhonebookUid)); + started = taskAfter.Exists(); + taskAfter.EndTask(); + + delete entry; + entry = NULL; + CleanupStack::PopAndDestroy(&wsSession); + ); + QCOMPARE(err, KErrNone); + QCOMPARE(error, KErrNone); + QVERIFY(started); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerRemoveApplication() +{ + bool leaveOnRemove(true); + bool removed(false); + + _LIT(KSapiPackageFileName, + "c:\\testing\\data\\t_apphandler\\installs\\sapiapp_S60_3_X_v_1_0_0.sisx"); + _LIT(KSapiAppFileName, "c:\\sys\\bin\\sapiapp.exe"); + const TUid KSapiAppUid(TUid::Uid(0xe6bc1167)); + + T_CaInstaller *installer = NULL; + installer = T_CaInstaller::NewL(); + CleanupStack::PushL(installer); + TRAPD(err, installer->InstallL(KSapiPackageFileName)); + QCOMPARE(err, KErrNone); + QTest::qWait(20000); + + Usif::TComponentId componentId(0); + TRAP(err, componentId = installer->GetComponentIdL(KSapiAppFileName)); + QCOMPARE(err, KErrNone); + + appHandlerConstruction(); + + CaEntry *entry = new CaEntry(); + + entry->setEntryTypeName(caTypeApp); + entry->setFlags(RemovableEntryFlag); + entry->setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(KSapiAppUid.iUid)); + + entry->setAttribute(caAttrComponentId, + QString::number(componentId)); + + TRAP(err, iAppHandler->execute(*entry, caCmdRemove)); + QCOMPARE(err, KErrNone); + QTest::qWait(20000); + delete entry; + entry = NULL; + + // check again if installed, should be gone + TRAP(err, componentId = installer->GetComponentIdL(KSapiAppFileName)) + QCOMPARE(err, KErrNone); + QCOMPARE(componentId, 0); + CleanupStack::PopAndDestroy(installer); + +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerRemoveJavaApplication() +{ + const int javaAppUid = 0x101251BB;// + bool removed(false); + int error(KErrNone); + + TRAPD(err, + QVERIFY(javaAppInstalled(javaAppUid)); + + appHandlerConstruction(); + + CaEntry *entry = new CaEntry(); + entry->setEntryTypeName(caTypeApp); + entry->setFlags(RemovableEntryFlag); + entry->setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(javaAppUid)); + + Usif::RSoftwareComponentRegistry scr; + CleanupClosePushL(scr); + User::LeaveIfError(scr.Connect()); + TUid uid; + Usif::TComponentId componentId = + scr.GetComponentIdForAppL( uid.Uid( javaAppUid ) ); + + if (componentId > 0) { + entry->setAttribute(caAttrComponentId, QString::number(componentId)); + } + + CleanupStack::PopAndDestroy(&scr); + + error = iAppHandler->execute(*entry, caCmdRemove); + QTest::qWait(20000); + delete entry; + entry = NULL; + ) + QVERIFY(!javaAppInstalled(javaAppUid)); + QCOMPARE(err, KErrNone); + QCOMPARE(error, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool T_CaHandler::javaAppInstalled(TInt32 aUid) + { + TBool result = EFalse; + Usif::RSoftwareComponentRegistry scr; + CleanupClosePushL(scr); + scr.Connect(); + TUid uid; + TInt err; + Usif::TComponentId componentId( 0 ); + TRAP(err, componentId = + scr.GetComponentIdForAppL( + uid.Uid( aUid ) ) ) + if (componentId > 0 && err == KErrNone) + { + result = ETrue; + } + CleanupStack::PopAndDestroy(&scr); + return result; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::testCCaTaskList() +{ + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + CCaTaskList* taskList = CCaTaskList::NewL( wsSession ); + taskList->UpdateListL(); + QVERIFY(taskList->IsRootWindowGroup(-1) == EFalse); + delete taskList; + CleanupStack::PopAndDestroy( &wsSession ); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaHandler::appHandlerCreateInstance() +{ + QServiceManager serviceManager; + CaAppHandlerPlugin plugin; + QServiceFilter serviceFilter("com.nokia.homescreen.ICommandHandler"); + serviceFilter.setCustomAttribute("entryTypeName", "application"); + QList serviceInterfaceDescriptorList = + serviceManager.findInterfaces(serviceFilter); + int len = serviceInterfaceDescriptorList.size(); + QVERIFY(len>0); + QServiceInterfaceDescriptor serviceInterfaceDescriptor = + serviceInterfaceDescriptorList[0]; + QObject *handler = plugin.createInstance( + serviceInterfaceDescriptor, NULL, NULL); + QVERIFY(handler); + delete handler; +} + +QTEST_MAIN(T_CaHandler) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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 "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } + + + + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/t_caapphandler.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/t_caapphandler.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,23 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ./../../inc/*.h \ + ./../../../../tsrc/testutils/inc + +SOURCES += ./src/*.cpp \ + ./../../src/*.cpp \ + ./../../../../tsrc/testutils/src/*.cpp diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/app/tsrc/t_caapphandler/t_caapphandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/tsrc/t_caapphandler/t_caapphandler.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,101 @@ +# 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: + + +TEMPLATE = app + +CONFIG += hb mobility +MOBILITY = serviceframework +HB = hbcore + +include(../../../../../common.pri) +include(../../../../tsrc/testutils/testutils.pri) +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src \ + ../../inc \ + ../../src + +INCLUDEPATH += \ + ./inc \ + ../../inc \ + ../../../../cautils/inc \ + ../../../../castorage/inc \ + ../../../../caclient/inc \ + ../../../../inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_caapphandler.pri) + +symbian: { + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20028711 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lecom \ + -lcautils \ + -lapgrfx \ + -lws32 \ + -lapparc \ + -lsisregistryclient \ + -lsif \ + -lscrclient \ + -lxqutils \ + -lefsrv \ + -lcone \ + -lcaclient + + BLD_INF_RULES.prj_testexports += "./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caapphandler/installs/" \ + "./data/winscw/Hello.jar c:/testing/data/t_caapphandler/installs/" + + BLD_INF_RULES.prj_exports += "./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caapphandler/installs/" \ + "./data/winscw/Hello.jar c:/testing/data/t_caapphandler/installs/" + + exportArmSis.sources += ./data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx \ + ./data/winscw/Hello.jar + exportArmSis.path = c:/testing/data/t_caapphandler/installs + DEPLOYMENT += exportArmSis +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../.."); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=./src/*\" sbs -j 4 -c winscw_udeb"); + + chdir("tsrc/t_catapphandler"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_catapphandler -o c:\\t_catapphandler.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../.."); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o tsrc/t_catapphandler/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o tsrc/t_catapphandler/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/function_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/function_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,68 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../.."); + + system("call qmake -config coverage"); + system("call bldmake bldfiles"); + system("call abld makefile winscw"); + system("call abld reallyclean winscw"); + + system('call ctcwrap -i f -C "EXCLUDE=*" -C "NO_EXCLUDE+./src/*" abld build winscw udeb'); + + chdir("tsrc/t_catapphandler"); + system("call qmake -config coverage"); + system("call bldmake bldfiles"); + system("call abld test makefile winscw"); + system("call abld test build winscw udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_catapphandler -o c:\\t_catapphandler.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../.."); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o tsrc/t_catapphandler/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o tsrc/t_catapphandler/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/inc/t_catapphandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/inc/t_catapphandler.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2008 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: Test class for homescreen::core + * + */ + +#include + +#include "catapphandler.h" + +/** + * @test Test class for homescreen::hsutils modules. + */ +class CaTappHandlerPluginTest: public QObject +{ +Q_OBJECT + +private slots: + + void init(); + void cleanup(); + void cleanupTestCase(); + void initTestCase(); + + /** + * CaTappHandler + */ + void testConstruction(); + void testExecute(); + void tAppHandlerCreateInstance(); + +private: + + CaTappHandler *mTappHandler; + +}; + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006-2006 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: Plugin Interface +* +*/ + + +#ifndef C_WAITACTIVE_H +#define C_WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // C_WAITACTIVE_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_catapphandler_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/src/t_catapphandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/src/t_catapphandler.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,152 @@ +/* + * 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: Main test class for test library. + * + */ + +//#include +//#include +//#include + +#include +#include + +#include "t_catapphandler.h" +#include "catapphandlerplugin.h" +#include "catapphandler.h" +#include "caentry.h" +#include "waitactive.h" + +QTM_USE_NAMESPACE + +//const QString xmlPath = "./resource/qt/plugins/stateplugins/" +#ifdef Q_OS_SYMBIAN +// const QString mockedStatePluginsXml = "mockstateplugins.s60xml"; +#else +// const QString mockedStatePluginsXml = "mockstateplugins.xml"; +#endif + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::testConstruction() +{ + CaTappHandler* tappHandler = new CaTappHandler(); + + QVERIFY(tappHandler); + + delete tappHandler; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::testExecute() +{ + const TInt KAppUid(0x20022EF9); // contacts + + CaTappHandler* tAppHandler = new CaTappHandler(); + + CaEntry* entry = new CaEntry(); + entry->setAttribute("item:launchuri","appto://20022EF9?"); + CWaitActive* wait = CWaitActive::NewL(); + + RWsSession wsSession; + + CleanupClosePushL(wsSession); + User::LeaveIfError(wsSession.Connect()); + + TApaTaskList taskList(wsSession); + TApaTask taskBefore = taskList.FindApp(TUid::Uid(KAppUid)); + if (taskBefore.Exists()) { + taskBefore.EndTask(); // close task if exists + } + + tAppHandler->execute(*entry, QString("open")); // run task + wait->Wait(15000000); + + TApaTask taskAfter = taskList.FindApp(TUid::Uid(KAppUid)); + + QVERIFY(taskAfter.Exists()); + taskAfter.EndTask(); + CleanupStack::PopAndDestroy(&wsSession); + delete wait; + delete entry; + delete tAppHandler; +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::tAppHandlerCreateInstance() +{ + QServiceManager serviceManager; + CaTappHandlerPlugin plugin; + QServiceFilter serviceFilter("com.nokia.homescreen.ICommandHandler"); + serviceFilter.setCustomAttribute("entryTypeName", "templatedApplication"); + QList serviceInterfaceDescriptorList = + serviceManager.findInterfaces(serviceFilter); + int len = serviceInterfaceDescriptorList.size(); + QVERIFY(len>0); + QServiceInterfaceDescriptor serviceInterfaceDescriptor = + serviceInterfaceDescriptorList[0]; + QScopedPointer handler(plugin.createInstance( + serviceInterfaceDescriptor, NULL, NULL)); + QVERIFY(!handler.isNull()); +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::init() +{ +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::cleanup() +{ +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::initTestCase() +{ + QStringList pluginPaths; + QString xmlName("catapphandlerplugin.xml"); + + pluginPaths.append("c:/resource/qt/plugins/commandhandler"); + pluginPaths.append("z:/resource/qt/plugins/commandhandler"); + + QServiceManager serviceManager; + foreach (QString path, pluginPaths) { + QApplication::addLibraryPath(path); + QDir dir(path); + if (dir.exists(xmlName)) { + serviceManager.addService(dir.absoluteFilePath(xmlName)); + } + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CaTappHandlerPluginTest::cleanupTestCase() +{ + +} + +QTEST_MAIN(CaTappHandlerPluginTest) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2006 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 "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() +{ + CTimer::ConstructL(); + iActiveScheduler = new (ELeave) CActiveSchedulerWait(); +} + +CWaitActive* CWaitActive::NewL() +{ + CWaitActive* self = new (ELeave) CWaitActive; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() : + CTimer(EPriorityStandard) +{ + CActiveScheduler::Add(this); +} + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() +{ + Cancel(); + delete iActiveScheduler; +} + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) +{ + After(anInterval); + iActiveScheduler->Start(); + +} + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() +{ + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + +} + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/t_catapphandler.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/t_catapphandler.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +# +# 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: +# + +#Header files +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + ../../../../caclient/inc/cahandler.h + +#Source files +SOURCES += ./src/*.cpp \ + ../../src/*.cpp + \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/tapp/tsrc/t_catapphandler/t_catapphandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/tapp/tsrc/t_catapphandler/t_catapphandler.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,67 @@ +# 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: +TEMPLATE = app + +CONFIG += hb mobility +MOBILITY = serviceframework +HB = hbcore + +include(../../../../../common.pri) +CONFIG(debug, debug|release):DESTDIR = debug +else:DESTDIR = release +CONFIG += debug_and_release \ + console +QT += testlib +coverage:DEFINES += COVERAGE_MEASUREMENT +DEPENDPATH += . \ + ./inc \ + ./src \ + ../../inc \ + ../../src \ + ../../../../caclient/inc +INCLUDEPATH += ./inc \ + ../../inc \ + ../../../inc \ + ../../../../caclient/s60/inc \ + ../../../../cautils/inc \ + ../../../../caclient/inc \ + ../../../caclient/inc \ + ../../caclient/inc +include(t_catapphandler.pri) +LIBS += -lxqservice \ + -lcautils \ + -lws32 \ + -lapgrfx \ + -lcaclient +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20028714 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/resource/caurlhandlerplugin.xml --- a/contentstorage/cahandler/url/resource/caurlhandlerplugin.xml Thu Sep 02 20:45:03 2010 +0300 +++ b/contentstorage/cahandler/url/resource/caurlhandlerplugin.xml Thu Sep 16 12:11:40 2010 +0100 @@ -10,4 +10,4 @@ url - + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/inc/T_caurlhandlerplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/inc/T_caurlhandlerplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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: +* +*/ +/* + * T_cahandler.h + * + * Created on: 2009-09-16 + * Author: + */ + +#ifndef T_CAURLHANDLERPLUGIN_H +#define T_CAURLHANDLERPLUGIN_H + +class CaUrlHandler; + +#include +#include + +/** + * + * Test class. + * + */ +class T_CaUrlHandler: public QObject +{ + Q_OBJECT +public: + T_CaUrlHandler(); +private slots: + + //setup methods + void cleanup(); + void initTestCase(); + + void urlHandlerConstruction(); + void urlHandlerMultipleLoad(); + void urlHandlerMultipleLoadAndDelete(); + void urlHandlerOpenFails(); + /* uncomment and check test when browser is in TB10.1 platfrom */ + void urlHandlerRunApplication(); + void urlHandlerCreateInstance(); + +private: + CaUrlHandler *iUrlHandler; +}; + +#endif // T_CAURLHANDLERPLUGIN_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006-2006 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: Plugin Interface +* +*/ + + +#ifndef C_WAITACTIVE_H +#define C_WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // C_WAITACTIVE_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_caurlhandler_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/src/T_caurlhandlerplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/src/T_caurlhandlerplugin.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,266 @@ +/* +* 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: +* +*/ +/* + * T_caapphandlerplugin.cpp + * + * Created on: 2009-09-16 + * Author: + */ + +// for CleanupResetAndDestroyPushL +#include +#include +#include +#include +#include + +#include + +#include "T_caurlhandlerplugin.h" +#include "waitactive.h" +#include "caurlhandler.h" +#include "caurlhandlerplugin.h" +#include "caentry.h" + +QTM_USE_NAMESPACE + +const TInt KBrowserUid = { 0x10008D39 }; +static const char caUrlAddress[] = "http://www.nokia.com"; +static const char caTypeUrl[] = "url"; +static const char caAttrUrl[] = "url"; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +T_CaUrlHandler::T_CaUrlHandler(): + iUrlHandler(NULL) +{ +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::cleanup() +{ + delete iUrlHandler; + iUrlHandler = NULL; +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::initTestCase() +{ + QStringList pluginPaths; + QString xmlName("caurlhandlerplugin.xml"); + + pluginPaths.append("c:/resource/qt/plugins/commandhandler"); + pluginPaths.append("z:/resource/qt/plugins/commandhandler"); + + QServiceManager serviceManager; + foreach (QString path, pluginPaths) { + QApplication::addLibraryPath(path); + QDir dir(path); + if (dir.exists(xmlName)) { + serviceManager.addService(dir.absoluteFilePath(xmlName)); + } + } +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::urlHandlerConstruction() +{ + delete iUrlHandler; + iUrlHandler = NULL; + TInt error = KErrNone; + QT_TRYCATCH_ERROR(error, iUrlHandler = new CaUrlHandler()); + QCOMPARE(error, KErrNone); + QVERIFY(iUrlHandler); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::urlHandlerMultipleLoad() +{ + RPointerArray handlerArray; + bool foundNull(false); + TRAPD(err, + CleanupResetAndDestroyPushL(handlerArray); + for (TInt i(0); i < 10; ++i) { + handlerArray.AppendL( + new CaUrlHandler()); + if (handlerArray[i] == NULL) { + foundNull = true; + break; + } + } + CleanupStack::PopAndDestroy(&handlerArray); + ); + QCOMPARE(err, KErrNone); + QVERIFY(!foundNull); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::urlHandlerMultipleLoadAndDelete() +{ + bool foundNull(false); + CaUrlHandler *handlerPtr(NULL); + for (TInt i(0); i < 10; ++i) { + handlerPtr = new CaUrlHandler(); + if (handlerPtr == NULL) { + foundNull = true; + break; + }; + delete handlerPtr; + handlerPtr = NULL; + } + QVERIFY(!foundNull); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::urlHandlerOpenFails() +{ + urlHandlerConstruction(); + TInt errorUnsupportedCommand(KErrNone); + TInt errorOpen(KErrNone); + bool notStarted(false); + + RWsSession wsSession; + TRAPD(err, + CleanupClosePushL(wsSession); + User::LeaveIfError(wsSession.Connect()); + + TApaTaskList taskList(wsSession); + TApaTask taskBefore = taskList.FindApp(TUid::Uid(KBrowserUid)); + + if (taskBefore.Exists()) { + taskBefore.EndTask(); + } + + CaEntry *entry = new CaEntry(); + + // valid entry type name + entry->setEntryTypeName(caTypeUrl); + + //invalid command name + errorUnsupportedCommand = iUrlHandler->execute( + *entry, "unsupported_command_name"); + + // no attribute + errorOpen = iUrlHandler->execute(*entry, caCmdOpen); + QTest::qWait(3000); + + + TApaTask taskAfter = taskList.FindApp(TUid::Uid(KBrowserUid)); + notStarted = !taskAfter.Exists(); + + delete entry; + entry = NULL; + CleanupStack::PopAndDestroy(&wsSession); + ); + QCOMPARE(err, KErrNone); + QCOMPARE(errorUnsupportedCommand, errorUnsupportedCommand); + //QCOMPARE(errorUnsupportedCommand, KErrNotSupported); + QVERIFY(notStarted); + QCOMPARE(errorOpen, KErrGeneral); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +/* uncomment and check test when browser is in TB10.1 platfrom */ +void T_CaUrlHandler::urlHandlerRunApplication() +{ + urlHandlerConstruction(); + + TInt errorOpen(KErrNone); + bool started(false); + TRAPD(err, + CaEntry *entry = new CaEntry(); + + RWsSession wsSession; + CleanupClosePushL(wsSession); + User::LeaveIfError(wsSession.Connect()); + + TApaTaskList taskList(wsSession); + TApaTask taskBefore = taskList.FindApp(TUid::Uid(KBrowserUid)); + + if (taskBefore.Exists()) { + taskBefore.EndTask(); + } + + // valid data needed to launch url + entry->setEntryTypeName(caTypeUrl); + entry->setAttribute(caAttrUrl,caUrlAddress); + + errorOpen = iUrlHandler->execute(*entry, caCmdOpen); + QTest::qWait(3000); + + TApaTask taskAfter = taskList.FindApp(TUid::Uid(KBrowserUid)); + started = taskAfter.Exists(); + taskAfter.EndTask(); + + delete entry; + entry = NULL; + CleanupStack::PopAndDestroy(&wsSession); + ); + QCOMPARE(err, KErrNone); + QCOMPARE(errorOpen, KErrNone); + //QEXPECT_FAIL("", "No web browser now, so the check for running browser is expect to fail.\n" + // "Ensure once the browser is available this failure expectation is removed.", + // Continue); + QVERIFY(started); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaUrlHandler::urlHandlerCreateInstance() +{ + QServiceManager serviceManager; + CaUrlHandlerPlugin plugin; + QServiceFilter serviceFilter("com.nokia.homescreen.ICommandHandler"); + serviceFilter.setCustomAttribute("entryTypeName", "application"); + QList serviceInterfaceDescriptorList = + serviceManager.findInterfaces(serviceFilter); + int len = serviceInterfaceDescriptorList.size(); + QVERIFY(len>0); + QServiceInterfaceDescriptor serviceInterfaceDescriptor = + serviceInterfaceDescriptorList[0]; + QObject *handler = plugin.createInstance( + serviceInterfaceDescriptor, NULL, NULL); + QVERIFY(handler); + delete handler; +} + +QTEST_MAIN(T_CaUrlHandler) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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 "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } + + + + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/t_caurlhandler.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/t_caurlhandler.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ./../../inc/*.h + +SOURCES += ./src/*.cpp \ + ./../../src/*.cpp diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/cahandler/url/tsrc/t_caurlhandler/t_caurlhandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/url/tsrc/t_caurlhandler/t_caurlhandler.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,88 @@ +# 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: + + +TEMPLATE = app + +CONFIG += hb mobility +MOBILITY = serviceframework +HB = hbcore + +include(../../../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src \ + ../../inc \ + ../../src + +INCLUDEPATH += ./inc \ + ../../../../inc \ + ../../../../cautils/inc \ + ../../../../castorage/inc \ + ../../../../caclient/inc \ + ../../cahandler/url/inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_caurlhandler.pri) + +symbian: { + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x2002DCF1 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lecom \ + -lcautils \ + -lapgrfx \ + -lws32 \ + -lapparc \ + -lsisregistryclient \ + -lxqutils \ + -lcaclient + +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/camificonengine/tsrc/t_camificonengine/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/data/example.mbm Binary file contentstorage/camificonengine/tsrc/t_camificonengine/data/example.mbm has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/data/example.mif Binary file contentstorage/camificonengine/tsrc/t_camificonengine/data/example.mif has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/inc/T_camificonengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/camificonengine/tsrc/t_camificonengine/inc/T_camificonengine.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ +/* + * T_camificonengine.h + * + * Created on: 2010-08-10 + * Author: + */ + +#ifndef T_CAMIFICONENGINE_H +#define T_CAMIFICONENGINE_H + +#include + +//------------------------------------------------------------------------------ + + +/** + * + * Test class. + * + */ +class T_CaMifIconEngine: public QObject +{ + Q_OBJECT +private slots: + + void initEngine(); + void mifIconKey(); + void mbmIconKey(); + void mifIconAddFile(); + void mbmIconAddFile(); + void mifIconPixmap(); + void mbmIconPixmap(); +}; + +#endif // T_CAMIFICONENGINE_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/camificonengine/tsrc/t_camificonengine/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_camificonengine_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\sis\rd.cer -key ..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/src/T_camificonengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/camificonengine/tsrc/t_camificonengine/src/T_camificonengine.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,150 @@ +/* +* 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: +* +*/ +/* + * T_camificonengine.cpp + * + * Created on: 2010-08-10 + * Author: + */ + +// CLASS HEADERS + +#include +#include + +#include "T_camificonengine.h" +#include "camificonengine.h" +#include "cambmiconengine.h" + +class CaMifIconPlugin : public QIconEnginePluginV2 +{ +public: + QStringList keys() const; + QIconEngineV2 *create(const QString &filename = QString()); +}; + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::initEngine() +{ + CaMifIconPlugin plugin; + QStringList keys; + keys << "mif" << "mbm"; + QVERIFY(plugin.keys() == keys); + QIconEngineV2 *engine = + plugin.create("c:/testing/data/t_camificonengine/example.mbm"); + QVERIFY(engine); + delete engine; + engine = NULL; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::mifIconKey() +{ + CaMifIconEngine engine; + QCOMPARE(engine.key(), QString("mif")); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::mbmIconKey() +{ + CaMbmIconEngine engine; + QCOMPARE(engine.key(), QString("mbm")); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::mifIconAddFile() +{ + CaMifIconEngine engine; + QSize testSize(1, 1); + engine.addFile("c:/testing/data/t_camificonengine/example.mif", + testSize, QIcon::Normal, QIcon::On); + engine.addFile("not important", testSize, QIcon::Normal, QIcon::On); + QSize size = engine.actualSize(testSize, QIcon::Normal, QIcon::On); + QVERIFY(size == testSize); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::mbmIconAddFile() +{ + CaMbmIconEngine engine; + QSize testSize(1, 1); + engine.addFile("c:/testing/data/t_camificonengine/example.mbm", + testSize, QIcon::Normal, QIcon::On); + engine.addFile("not important", testSize, QIcon::Normal, QIcon::On); + QSize size = engine.actualSize(testSize, QIcon::Normal, QIcon::On); + QVERIFY(size == testSize); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::mifIconPixmap() +{ + CaMifIconEngine engine; + QSize testSize(1, 1); + engine.addFile("c:/testing/data/t_camificonengine/example.mif", + testSize, QIcon::Normal, QIcon::On); + QPixmap pixmap = engine.pixmap(testSize, QIcon::Normal, QIcon::On); + QSize size = pixmap.size(); + QVERIFY(size.width()>0); + QVERIFY(size.height()>0); + engine.addPixmap(pixmap, QIcon::Normal, QIcon::On); + QPainter painter; + engine.paint(&painter, QRect(QPoint(0, 0), size), + QIcon::Normal, QIcon::On); + QIconEngineV2 *clonedEngine = engine.clone(); + QVERIFY(size == + clonedEngine->pixmap(testSize, QIcon::Normal, QIcon::On).size()); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaMifIconEngine::mbmIconPixmap() +{ + CaMbmIconEngine engine; + QSize testSize(1, 1); + engine.addFile("c:/testing/data/t_camificonengine/example.mbm", + testSize, QIcon::Normal, QIcon::On); + QPixmap pixmap = engine.pixmap(testSize, QIcon::Normal, QIcon::On); + QSize size = pixmap.size(); + QVERIFY(size.width()>0); + QVERIFY(size.height()>0); + engine.addPixmap(pixmap, QIcon::Normal, QIcon::On); + QPainter painter; + engine.paint(&painter, QRect(QPoint(0, 0), size), + QIcon::Normal, QIcon::On); + QIconEngineV2 *clonedEngine = engine.clone(); + QVERIFY(size == + clonedEngine->pixmap(testSize, QIcon::Normal, QIcon::On).size()); +} + +QTEST_MAIN(T_CaMifIconEngine) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/t_camificonengine.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/camificonengine/tsrc/t_camificonengine/t_camificonengine.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ./../../inc/*.h + +SOURCES += ./src/*.cpp \ + ./../../src/*.cpp diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/camificonengine/tsrc/t_camificonengine/t_camificonengine.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/camificonengine/tsrc/t_camificonengine/t_camificonengine.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,84 @@ +# 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: + + +TEMPLATE = app + +CONFIG += hb mobility +MOBILITY = serviceframework +HB = hbcore + +include(../../../../common.pri) +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src \ + ../../inc \ + ../../src + +INCLUDEPATH += \ + ./inc \ + ../../inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_camificonengine.pri) + +symbian: { + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20028711 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lcamificon \ + -laknicon \ + -lavkon + + BLD_INF_RULES.prj_testexports += "./data/example.mif c:/testing/data/t_camificonengine/" \ + "./data/example.mbm c:/testing/data/t_camificonengine/" + BLD_INF_RULES.prj_exports += "./data/example.mif c:/testing/data/t_camificonengine/" \ + "./data/example.mbm c:/testing/data/t_camificonengine/" + + exportArm.sources += ./data/example.mif \ + ./data/example.mbm + exportArm.path = c:/testing/data/t_camificonengine + DEPLOYMENT += exportArm +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/data/MIDPTestIcons.jad --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/data/MIDPTestIcons.jad Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +MIDlet-1: Icon PNG, /Duke.png, com.nokia.midp.test.midptest.MIDPTest +MIDlet-10: Icon WMF, /AN04369_.WMF, com.nokia.midp.test.midptest.MIDPTest +MIDlet-11: Icon WMF2, /TR00232_.WMF, com.nokia.midp.test.midptest.MIDPTest +MIDlet-12: Icon WBMP, /happy.wbmp, com.nokia.midp.test.midptest.MIDPTest +MIDlet-2: Icon GIF, /gs_98x98.gif, com.nokia.midp.test.midptest.NoUIMIDlet +MIDlet-3: Icon GIF2, /gs_16x16.gif, com.nokia.midp.test.midptest.MIDPTest +MIDlet-4: Icon BMP, /logo.bmp, com.nokia.midp.test.midptest.MIDPTest +MIDlet-5: Icon JPG, /j_131x155.jpg, com.nokia.midp.test.midptest.MIDPTest +MIDlet-6: Icon JPG2, /j_29x29.jpg, com.nokia.midp.test.midptest.MIDPTest +MIDlet-7: Icon MNG, /DUTCH1.mng, com.nokia.midp.test.midptest.MIDPTest +MIDlet-8: Icon TIF, /Sample_UPC_TIF.tif, com.nokia.midp.test.midptest.MIDPTest +MIDlet-9: Icon ICO, /favicon.ico, com.nokia.midp.test.midptest.MIDPTest +MIDlet-Data-Size: 0 +MIDlet-Delete-Confirm: This is delete confirm text.... +MIDlet-Description: Testing support for several icon formats +MIDlet-Icon: /Duke.png +MIDlet-Jar-Size: 174409 +MIDlet-Jar-URL: MIDPTestIcons.jar +MIDlet-Name: MIDP Test Icon +MIDlet-Vendor: Nokia - OMJ Testing +MIDlet-Version: 3.91.2 +MicroEdition-Configuration: CLDC-1.0 +MicroEdition-Profile: MIDP-1.0 +Nokia-MIDlet-no-exit: true +UserDefined1: Foo value diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/data/MIDPTestIcons.jar Binary file contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/data/MIDPTestIcons.jar has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,54 @@ +# +# Copyright (c) 2010 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + +system("call qmake -config coverage"); +system("call sbs clean -c winscw_udeb"); +system("call sbs clean -c winscw_udeb.test"); +system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../../src/*\" sbs -j 4 -c winscw_udeb"); + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_casoftwareregistry.exe -o c:\\t_casoftwareregistry.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/inc/t_casoftwareregistry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/inc/t_casoftwareregistry.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,62 @@ +/* +* 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: +* +*/ + +#ifndef T_CA_SERVICE_REGISTRY_H +#define T_CA_SERVICE_REGISTRY_H + +#include +#include "casoftwareregistry.h" + +/** + * + * Test class. + * + */ +class T_CaSoftwareRegistry: public QObject +{ + Q_OBJECT +public: + T_CaSoftwareRegistry(); +private slots: + + //setup methods + void initTestCase(); + void cleanup(); + + void testSoftwareRegistryCreate(); +#ifdef Q_OS_SYMBIAN + void testExtractingDetailsFromEntry(); + void testExtractingDetailsFromJavaEntry(); + void testUninstallDetails(); + void testGetLogEntries(); + void testApplicationsUids(); + // tests for caprogressscanner + void testProgresScannerNew(); + void testProgressStartOperationHandler(); + void testProgressProgressOperationHandler(); + void testProgressEndOperationHandler(); + void testCreateUninstallNotifier(); +#endif + void testEntryDetails(); + + void testUninstallDetailsBadComponentId(); + +private: + QSharedPointer mSoftwareRegistry; +}; + +#endif // T_CA_SERVICE_REGISTRY_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_casoftwareregistry_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\sis\rd.cer -key ..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/src/t_caprogresscaner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/src/t_caprogresscaner.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2010 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 "caprogresscanner.h" +#include "cauninstallobserver.h" +#include "t_casoftwareregistry.h" + +#ifdef Q_OS_SYMBIAN +#include +#include +#undef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#include + +#include +using namespace Usif; +#include +#endif + + + +#ifdef Q_OS_SYMBIAN + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testProgresScannerNew() + { + bool result(false); + CaUninstallObserver* uninstallObserver = new CaUninstallObserver(); + TRAPD(err, + CCaProgresScanner *progresScanner = + CCaProgresScanner::NewL(uninstallObserver); + result = progresScanner != NULL; + delete progresScanner; + ); + delete uninstallObserver; + QCOMPARE(err, KErrNone); + QVERIFY(result); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testProgressStartOperationHandler() + { + TInt err( KErrNone ); + + _LIT(KGlobalCompId, "abc"); + _LIT(KComponentName, "compName"); + _LIT(KIconPath, "iconPath"); + _LIT(KComponentIcon, "iconName"); + _LIT(KSoftwareType, "Native"); + + TUint key = 123456; + TPtrC globalCompId(KGlobalCompId); + TPtrC compName(KComponentName); + TPtrC iconPath(KIconPath); + TPtrC compIcon(KComponentIcon); + TPtrC softwareType(KSoftwareType); + TSifOperationPhase operationPhase = TSifOperationPhase(EInstalling); + + TInt compSize = 0; + RPointerArray appNameArray; + CleanupResetAndDestroyPushL(appNameArray); + RPointerArray appIconArray; + CleanupResetAndDestroyPushL(appIconArray); + CSifOperationStartData* startdata = CSifOperationStartData::NewLC( + globalCompId, compName, appNameArray, appIconArray, + compSize, iconPath, compIcon, softwareType, operationPhase); + CaUninstallObserver* uninstallObserver = new CaUninstallObserver(); + CCaProgresScanner *progresScanner = + CCaProgresScanner::NewL(uninstallObserver); + + TRAP(err, progresScanner->StartOperationHandler(key, *startdata)); + delete uninstallObserver; + delete progresScanner; + CleanupStack::PopAndDestroy(3, &appNameArray); + QCOMPARE(err, KErrNone); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testProgressProgressOperationHandler() + { + TInt err( KErrNone ); + + _LIT(KGlobalCompId, "abc"); + + TPtrC globalCompIdProgress(KGlobalCompId); + TInt phase=0, subPhase=0, curProgress=0, total=0; + + TSifOperationPhase enumPhase = static_cast(phase); + TSifOperationSubPhase enumSubPhase = static_cast(subPhase); + CaUninstallObserver* uninstallObserver = new CaUninstallObserver(); + CSifOperationProgressData* progressdata = CSifOperationProgressData::NewLC( + globalCompIdProgress, enumPhase, enumSubPhase, curProgress, total); + + CCaProgresScanner *progresScanner = + CCaProgresScanner::NewL(uninstallObserver); + + TRAP(err, progresScanner->ProgressOperationHandler( *progressdata)); + delete uninstallObserver; + delete progresScanner; + CleanupStack::PopAndDestroy(progressdata); + QCOMPARE(err, KErrNone); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testProgressEndOperationHandler() + { + TInt err( KErrNone ); + _LIT(KGlobalCompId, "abc"); + _LIT(KErrMsg, "errMsg"); + _LIT(KErrMsgDetails, "errMsgDetails"); + + TPtrC errMsg(KErrMsg), errMsgDetails(KErrMsgDetails); + TInt errCat(0), errCode(0); + TPtrC globalCompIdEnd(KGlobalCompId); + + TErrorCategory enumErrCat = static_cast(errCat); + CSifOperationEndData* enddata = CSifOperationEndData::NewLC( + globalCompIdEnd, enumErrCat, errCode, errMsg, errMsgDetails); + + CaUninstallObserver* uninstallObserver = new CaUninstallObserver(); + CCaProgresScanner *progresScanner = + CCaProgresScanner::NewL(uninstallObserver); + TRAP(err, progresScanner->EndOperationHandler( *enddata )); + delete uninstallObserver; + delete progresScanner; + QCOMPARE(err, KErrNone); + CleanupStack::PopAndDestroy(enddata); + } + +#endif // Q_OS_SYMBIAN diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/src/t_casoftwareregistry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/src/t_casoftwareregistry.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,468 @@ +/* +* Copyright (c) 2010 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 +#include +#include "casoftwareregistry.h" +#include "casoftwareregistry_p.h" + +#include "t_casoftwareregistry.h" + +#ifdef Q_OS_SYMBIAN +#include +#include +#undef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#include + +#include +#include + +#include +using namespace Usif; +#include +#endif + +T_CaSoftwareRegistry::T_CaSoftwareRegistry(): + mSoftwareRegistry(NULL) +{ +} + +void T_CaSoftwareRegistry::cleanup() +{ + +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::initTestCase() +{ + +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testSoftwareRegistryCreate() +{ + + QVERIFY(CaSoftwareRegistry::create()); + QSharedPointer scr = CaSoftwareRegistry::create(); + QVERIFY(CaSoftwareRegistry::create().data() == scr.data()); +} + +#ifdef Q_OS_SYMBIAN + +void T_CaSoftwareRegistry::testExtractingDetailsFromEntry() +{ + // set up expexted values.. + _LIT(KName, "appname"); + _LIT(KVendor, "xxx"); + + TDriveList installedDrives; + + QString expectedDrives; + + const TInt driveListLen(installedDrives.Length()); + for (TInt i( 0 ); i < driveListLen; ++i) { + if (i == 3 || i == 4) { + installedDrives[i] = '\1'; + expectedDrives = expectedDrives.append(QChar('A'+ i)).append(":"); + } else { + installedDrives[i] = '\0'; + } + } + + _LIT(KVersion, "ver 1.1"); + _LIT(KSwType, "software type"); + const TInt64 KSize = 2048; // i.e 2k + + // definition below are provided just to satisfy CComponentEntry::NewL + _LIT(KGlobalId, ""); + TBool KRemovable(EFalse); + TScomoState KScomoState; + TComponentId KId; + _LIT(KInstallTime, ""); + TBool KDrmProtected(EFalse); + TBool KHidden(EFalse); + TBool KKnownRevoked(EFalse); + TBool KOriginVerified(EFalse); + + + QScopedPointer entry; + + QT_TRAP_THROWING(entry.reset( + CComponentEntry::NewL( + KId, + KName, + KVendor, + KSwType, + KGlobalId, + KRemovable, + KSize, + KScomoState, + installedDrives, + KVersion, + KInstallTime, + KDrmProtected, + KHidden, + KKnownRevoked, + KOriginVerified) + ) + ); + + CaSoftwareRegistryPrivate scr(NULL); + CaSoftwareRegistry::DetailMap detailMap = scr.entryDetailsL(*entry); + + QCOMPARE(detailMap.size(), 6); + QCOMPARE(detailMap[CaSoftwareRegistry::componentNameKey()], + XQConversions::s60DescToQString(KName)); + QCOMPARE(detailMap[CaSoftwareRegistry::componentVersionKey()], + XQConversions::s60DescToQString(KVersion)); + QCOMPARE(detailMap[CaSoftwareRegistry::componentVendorKey()], + XQConversions::s60DescToQString(KVendor)); + QCOMPARE(detailMap[CaSoftwareRegistry::componentDriveInfoKey()], + expectedDrives); + QCOMPARE(detailMap[CaSoftwareRegistry::componentSizeKey()], + QString(HbParameterLengthLimiter("txt_applib_dialog_l1_kb") + .arg(QString().setNum(static_cast(KSize / 1024))))); + QCOMPARE(detailMap[CaSoftwareRegistry::componentTypeKey()], + XQConversions::s60DescToQString(KSwType)); + + for (TInt i( 0 ); i < driveListLen; ++i) { + installedDrives[i]= '\0'; + } + + QT_TRAP_THROWING(entry.reset( + CComponentEntry::NewL( + KId, + _L(""), // name + _L(""), // vendor + _L(""), // sw type + KGlobalId, + KRemovable, + 0, // size + KScomoState, + installedDrives, + _L(""), // version + KInstallTime, + KDrmProtected, + KHidden, + KKnownRevoked, + KOriginVerified) + ) + ); + + detailMap = scr.entryDetailsL(*entry); + + QCOMPARE(detailMap.size(), 6); + QCOMPARE(detailMap[CaSoftwareRegistry::componentNameKey()], + QString("")); + QCOMPARE(detailMap[CaSoftwareRegistry::componentVersionKey()], + QString("")); + QCOMPARE(detailMap[CaSoftwareRegistry::componentVendorKey()], + QString("")); + QCOMPARE(detailMap[CaSoftwareRegistry::componentDriveInfoKey()], + QString("")); + QCOMPARE(detailMap[CaSoftwareRegistry::componentSizeKey()], + QString(HbParameterLengthLimiter("txt_applib_dialog_l1_kb") + .arg(QString().setNum( + static_cast(0))))); + QCOMPARE(detailMap[CaSoftwareRegistry::componentTypeKey()], + QString("")); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testExtractingDetailsFromJavaEntry() +{ + static const int javaUid = 270026627; + + Usif::RSoftwareInstall sif; + CleanupClosePushL( sif ); + User::LeaveIfError( sif.Connect() ); + + // Install the component + _LIT16( KMIDPTestIconsJadPath, "c:\\testing\\data\\t_casoftwareregistry\\installs\\MIDPTestIcons.jad" ); + Usif::COpaqueNamedParams* arguments = NULL; + Usif::COpaqueNamedParams* results = NULL; + arguments = Usif::COpaqueNamedParams::NewLC(); + results = Usif::COpaqueNamedParams::NewLC(); + arguments->AddIntL( Usif::KSifInParam_InstallSilently, 1 ); + TRequestStatus status; + sif.Install( KMIDPTestIconsJadPath, *arguments, *results, status, EFalse ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + + CleanupStack::PopAndDestroy( results ); + + int componentId(0); + TRAPD(err, + RSoftwareComponentRegistry scr; + CleanupClosePushL(scr); + User::LeaveIfError(scr.Connect()); + componentId = scr.GetComponentIdForAppL(TUid::Uid(javaUid)); + CleanupStack::PopAndDestroy(&scr); + ); + QCOMPARE(err, KErrNone); + QVERIFY(componentId != 0); + + QSharedPointer scr = CaSoftwareRegistry::create(); + CaSoftwareRegistry::DetailMap detailMap = scr->entryDetails(componentId); + + QCOMPARE(detailMap[CaSoftwareRegistry::componentTypeKey()], + QString("java")); + QCOMPARE(detailMap[CaSoftwareRegistry::componentProtectionDomainKey()], + QString("txt_java_inst_setlabel_cert_domain_val_untrusted_third_party,javaapplicationinstaller")); + QCOMPARE(detailMap[CaSoftwareRegistry::componentDescriptionKey()], + QString("Testing support for several icon formats")); + + TComponentId localComponentId( componentId ); + results = Usif::COpaqueNamedParams::NewLC(); + TRequestStatus status2; + sif.Uninstall( localComponentId, *arguments, *results, status2 ); + User::WaitForRequest( status2 ); + User::LeaveIfError( status2.Int() ); + + CleanupStack::PopAndDestroy( results ); + CleanupStack::PopAndDestroy( arguments ); + // Disconnect from the SIF server + CleanupStack::PopAndDestroy( &sif ); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testUninstallDetails() +{ + static const int javaUid = 270026627; + + Usif::RSoftwareInstall sif; + CleanupClosePushL( sif ); + User::LeaveIfError( sif.Connect() ); + + // Install the component + _LIT16( KMIDPTestIconsJadPath, "c:\\testing\\data\\t_casoftwareregistry\\installs\\MIDPTestIcons.jad" ); + Usif::COpaqueNamedParams* arguments = NULL; + Usif::COpaqueNamedParams* results = NULL; + arguments = Usif::COpaqueNamedParams::NewLC(); + results = Usif::COpaqueNamedParams::NewLC(); + arguments->AddIntL( Usif::KSifInParam_InstallSilently, 1 ); + TRequestStatus status; + sif.Install( KMIDPTestIconsJadPath, *arguments, *results, status, EFalse ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + + CleanupStack::PopAndDestroy( results ); + + QSharedPointer registry = CaSoftwareRegistry::create(); + QVERIFY(registry); + QString componentName; + QStringList appUids; + QString confirmationMessage; + int componentId(0); + TRAPD(err, + RSoftwareComponentRegistry scr; + CleanupClosePushL(scr); + User::LeaveIfError(scr.Connect()); + componentId = scr.GetComponentIdForAppL(TUid::Uid(javaUid)); + CleanupStack::PopAndDestroy(&scr); + ); + QCOMPARE(err, KErrNone); + bool success = registry->getUninstallDetails( + componentId, componentName, appUids, confirmationMessage); + QVERIFY(success); + QCOMPARE(componentName, QString("MIDP Test Icon")); + QCOMPARE(confirmationMessage, QString("This is delete confirm text....")); + QCOMPARE(appUids.length(), 12); + QVERIFY(appUids.contains(QString::number(javaUid))); + + TComponentId localComponentId( componentId ); + results = Usif::COpaqueNamedParams::NewLC(); + TRequestStatus status2; + sif.Uninstall( localComponentId, *arguments, *results, status2 ); + User::WaitForRequest( status2 ); + User::LeaveIfError( status2.Int() ); + + CleanupStack::PopAndDestroy( results ); + CleanupStack::PopAndDestroy( arguments ); + // Disconnect from the SIF server + CleanupStack::PopAndDestroy( &sif ); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testGetLogEntries() +{ + RSoftwareComponentRegistry scr; + CleanupClosePushL(scr); + User::LeaveIfError(scr.Connect()); + + RPointerArray logEntries; + CleanupResetAndDestroyPushL( logEntries ); + + scr.RetrieveLogEntriesL(logEntries); + + QSharedPointer registry + = CaSoftwareRegistry::create(); + QList logMap + = registry->retrieveLogEntries(); + // 50 log items or less - ui spec + TInt lastLog(0); + const int maxLogsCount = 20; + if (logEntries.Count() > maxLogsCount) { + lastLog = logEntries.Count() - maxLogsCount; + } + // iteration through most recent log to the last + for (TInt i = logEntries.Count() - 1; i >= lastLog; i--) { + CScrLogEntry* entry = logEntries[i]; + QString iComponentName = XQConversions::s60DescToQString( + entry->ComponentName()); + QString iVersion = XQConversions::s60DescToQString( + entry->ComponentVersion()); + + TTime iRecordTime = entry->OperationTime(); + TDateTime dt = iRecordTime.DateTime(); + QDate date(dt.Year(), dt.Month()+1, dt.Day()+1); + HbExtendedLocale hbLoc; + QString strDateTime = hbLoc.format(date, r_qtn_date_usual_with_zero); + + TScrComponentOperationType iOpType = entry->OperationType(); + QString opType; + switch (iOpType) { + case EScrCompInstall: + opType = CaSoftwareRegistry::componentInstallValue(); + break; + case EScrCompUnInstall: + opType = CaSoftwareRegistry::componentUninstallValue(); + break; + case EScrCompUpgrade: + opType = CaSoftwareRegistry::componentUpgradeValue(); + break; + case EScrCompHidden: + opType = CaSoftwareRegistry::componentHiddenValue(); + break; + } + + QCOMPARE(iComponentName, + logMap[(logEntries.Count() - 1) - i].value(CaSoftwareRegistry::componentNameKey())); + QCOMPARE(iVersion, + logMap[(logEntries.Count() - 1) - i].value(CaSoftwareRegistry::componentVersionKey())); + QCOMPARE(strDateTime, + logMap[(logEntries.Count() - 1) - i].value(CaSoftwareRegistry::componentTimeKey())); + QCOMPARE(opType, + logMap[(logEntries.Count() - 1) - i].value( + CaSoftwareRegistry::componentOperationTypeKey())); + } + CleanupStack::PopAndDestroy( &logEntries ); + CleanupStack::PopAndDestroy(&scr); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSoftwareRegistry::testApplicationsUids() +{ + static const int javaUid = 270026627; + + Usif::RSoftwareInstall sif; + CleanupClosePushL( sif ); + User::LeaveIfError( sif.Connect() ); + + // Install the component + _LIT16( KMIDPTestIconsJadPath, "c:\\testing\\data\\t_casoftwareregistry\\installs\\MIDPTestIcons.jad" ); + Usif::COpaqueNamedParams* arguments = NULL; + Usif::COpaqueNamedParams* results = NULL; + arguments = Usif::COpaqueNamedParams::NewLC(); + results = Usif::COpaqueNamedParams::NewLC(); + arguments->AddIntL( Usif::KSifInParam_InstallSilently, 1 ); + TRequestStatus status; + sif.Install( KMIDPTestIconsJadPath, *arguments, *results, status, EFalse ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + + CleanupStack::PopAndDestroy( results ); + + + QSharedPointer registry = CaSoftwareRegistry::create(); + QVERIFY(registry); + QStringList appUids; + int componentId(0); + TRAPD(err, + RSoftwareComponentRegistry scr; + CleanupClosePushL(scr); + User::LeaveIfError(scr.Connect()); + componentId = scr.GetComponentIdForAppL(TUid::Uid(javaUid)); + CleanupStack::PopAndDestroy(&scr); + ); + QCOMPARE(err, KErrNone); + bool success = registry->getApplicationsUids(componentId, appUids); + QVERIFY(success); + QCOMPARE(appUids.length(), 12); + QVERIFY(appUids.contains(QString::number(javaUid))); + + TComponentId localComponentId( componentId ); + results = Usif::COpaqueNamedParams::NewLC(); + TRequestStatus status2; + sif.Uninstall( localComponentId, *arguments, *results, status2 ); + User::WaitForRequest( status2 ); + User::LeaveIfError( status2.Int() ); + + CleanupStack::PopAndDestroy( results ); + CleanupStack::PopAndDestroy( arguments ); + // Disconnect from the SIF server + CleanupStack::PopAndDestroy( &sif ); +} + +#endif // Q_OS_SYMBIAN + +void T_CaSoftwareRegistry::testEntryDetails() +{ + const int componentId = 0; // not reffering to any application + QSharedPointer scr = CaSoftwareRegistry::create(); + CaSoftwareRegistry::DetailMap detailMap = scr->entryDetails(componentId); + + QCOMPARE(detailMap, CaSoftwareRegistry::DetailMap()); +} + +void T_CaSoftwareRegistry::testUninstallDetailsBadComponentId() +{ + QSharedPointer registry = CaSoftwareRegistry::create(); + QVERIFY(registry); + QString componentName; + QStringList appUids; + QString confirmationMessage; + registry->getUninstallDetails(0, componentName, appUids, confirmationMessage); + QCOMPARE(componentName, QString()); + QCOMPARE(confirmationMessage, QString()); + QCOMPARE(appUids.length(), 0); +} + +void T_CaSoftwareRegistry::testCreateUninstallNotifier() + { + CaUninstallNotifier* notifier = CaSoftwareRegistry::create()->createUninstallNotifier(); + QVERIFY(notifier); + } +QTEST_MAIN(T_CaSoftwareRegistry) + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# Copyright (c) 2010 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: +# + +HEADERS += ./inc/t_casoftwareregistry.h \ + ../../../../homescreensrv_plat/contentstorage_api/casoftwareregistry.h \ + ../../../../homescreensrv_plat/contentstorage_api/cauninstallnotifier.h +SOURCES += ./src/*.cpp ../../src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,99 @@ +# Copyright (c) 2010 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: + + +TEMPLATE = app +DEFINES += CACLIENT_TEST +include(../../../../common.pri) + +CONFIG += hb +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src \ + ../../inc \ + ../../src \ + ../../../../homescreensrv_plat/contentstorage_api + +INCLUDEPATH += ./inc \ + ../../inc \ + ../../../../homescreensrv_plat/contentstorage_api \ + ../../../cautils/inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_casoftwareregistry.pri) + +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x2002DCF6 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lscrclient \ + -lbafl \ + -lestor \ + -lefsrv \ + -lxqutils \ + -lPlatformEnv \ + -lsifnotification \ + -lsif + + BLD_INF_RULES.prj_testexports += "./data/MIDPTestIcons.jad c:/testing/data/t_casoftwareregistry/installs/" \ + "./data/MIDPTestIcons.jar c:/testing/data/t_casoftwareregistry/installs/" + + BLD_INF_RULES.prj_exports += "./data/MIDPTestIcons.jad c:/testing/data/t_casoftwareregistry/installs/" \ + "./data/MIDPTestIcons.jar c:/testing/data/t_casoftwareregistry/installs/" + + exportArmSis.sources += ./data/MIDPTestIcons.jad \ + ./data/MIDPTestIcons.jar + exportArmSis.path = c:/testing/data/t_casoftwareregistry/installs + DEPLOYMENT += exportArmSis + + +include (t_casoftwareregistry_s60.pri) +} + +win32: { +include (t_casoftwareregistry_stub.pri) +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry_s60.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry_s60.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2010 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: +# +DEPENDPATH += ../../s60/inc \ + ../../s60/src +INCLUDEPATH += ../../s60/inc +HEADERS += ../../s60/inc/*.h +SOURCES += ../../s60/src/*.cpp \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry_stub.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry/t_casoftwareregistry_stub.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2010 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: +# +DEPENDPATH += ../../stub/inc \ + ../../stub/src +INCLUDEPATH += ../../stub/inc +HEADERS += ../../stub/inc/*.h +SOURCES += ../../stub/src/*.cpp \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casoftwareregistry/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casoftwareregistry/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# Copyright (c) 2010 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: +# + +TEMPLATE = subdirs +SUBDIRS = t_casoftwareregistry + +CONFIG += ordered + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/AccuWeather_W3C.wgt Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/AccuWeather_W3C.wgt has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/HelloWorld.jar Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/HelloWorld.jar has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/SmokeTestUnsigned.wgt Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/SmokeTestUnsigned.wgt has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/castorage.db Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/mmchistory Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/mmchistory has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx Binary file contentstorage/casrv/caappscanner/tsrc/t_caappscanner/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE+../../src/*" -C "NO_EXCLUDE+../../../../srvsrc/cainstallnotifier.cpp" -C "NO_EXCLUDE+../../../../srvsrc/casrvmmchistory.cpp" -C "NO_EXCLUDE+../../../../cautils/src/cautils.cpp" abld build winscw udeb \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system('ctcwrap -i fd -2comp -C "EXCLUDE=*" -C "NO_EXCLUDE+../../src/*" -C "NO_EXCLUDE+../../../../srvsrc/cainstallnotifier.cpp" -C "NO_EXCLUDE+../../../../srvsrc/casrvmmchistory.cpp" -C "NO_EXCLUDE+../../../../cautils/src/cautils.cpp" sbs -j 4 -c winscw_udeb'); + + } + + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_caappscanner -o c:\\t_caapscanner.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/T_casrvAppScaner.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/T_casrvAppScaner.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,106 @@ +/* + * 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: + * + */ + +#ifndef __T_casrvAppScaner_H__ +#define __T_casrvAppScaner_H__ + +#include + +#include "casrvplugin.h" +#include "casrvmanager.h" + +// FORWARD DECLARATIONS +class CTestUtils; +class CCaStorageProxy; +class CCaSrvEngUtils; +namespace Usif{ + class RSoftwareComponentRegistry; +} + +#include + +class T_CaInstaller; + +class T_casrvAppScaner : public QObject +{ + Q_OBJECT +public: + T_casrvAppScaner(); +private slots: + void initTestCase(); + void init(); + void testNew(); + void testHandler_LoadPlugin(); + void testHandler_New(); + void testUninstalled(); + void testInstalled(); + void testAddNewApp(); + void testNoUpdate(); + void testRemoveMmcApp(); + void testRemoveMmcAttr(); + void testRemoveMissingFlag(); + void testRemoveMissingFlag01(); + void testAddMissingFlag(); + void testSatApp(); + void testHsApp(); + void testAddRemovable(); + void testRemoveRemovable(); + void testRunError(); + void testInstallNotifier(); + void testDownloadCollectionAdd(); + void testDownloadCollectionUpdate(); + void testDownloadCollectionRemove(); + void testCreatePredefinedCollection(); + void testGetAllCollectionIdL(); + void testUpdateComponentIdL(); + void testSave(); + void testInsert(); + void testSetCWRTAppL(); + void testSetJavaAppL(); + void cleanup(); + void cleanupTestCase(); +private: // Data + //setup methods + + void Setup_UninstalledL(); + void Setup_AddNewAppL(); + void Setup_NoUpdateL(); + void Setup_RemoveMmcAppL(); + void Setup_RemoveMmcAttrL(); + void Setup_RemoveMissingFlagL(); + void Setup_RemoveMissingFlag01L(); + void Setup_AddMissingFlagL(); + void Setup_SatAppL(); + void Setup_HsAppL(); + void Setup_AddRemovableL(); + void Setup_RemoveRemovableL(); + + + CTestUtils *iTestUtils; + + CCaStorageProxy *iStorage; + + CCaSrvEngUtils *iSrvEngUtils; + + Usif::RSoftwareComponentRegistry *iScr; + + T_CaInstaller *iInstaller; +}; + +#endif // __T_casrvAppScaner_H__ + +// End of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/casrvtestutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/casrvtestutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,119 @@ +/* +* 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: +* +*/ +//utility class for tests +//all utility methods should be implemented here + +#include + +#include "casrvengutils.h" +#include "casrvplugin.h" + +class CCaStorageProxy; +class CCaInnerEntry; + +class CTestUtils: public CBase +{ +public: + + /**/ + virtual ~CTestUtils(); + + /**/ + static CTestUtils* NewL(); + + /**/ + static CTestUtils* NewLC(); + + /**/ + TUint FindAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ); + + /**/ + TInt LaunchApplicationL( const TUid aUid ); + + /**/ + TInt SimpleCloseTaskL(TInt aUid); + + /**/ + void WaitL(TInt aMicroSec); + + /**/ + void InstallFinishedL(); + + /** + * Gets RProperty + */ + TInt GetRProperty( TUid aCategory, TUint aKey, TDes& aValue ); + + /** + * Gets RProperty + */ + TInt GetRProperty( TUid aCategory, TUint aKey, TInt& aValue ); + + /** + * Sets RProperty + */ + TInt SetRProperty( TUid aCategory, TUint aKey, const TDesC& aValue ); + + /** + * Sets RProperty + */ + TInt SetRProperty( TUid aCategory, TUint aKey, TInt aValue ); + + /** + * Copys test Db + */ + TInt CopyDb(); + + /** + * Checks if app exists in Db + */ + TBool AppExistsInStorageL( TInt aComponentId, CCaStorageProxy* aStorage); + + TBool ComponentExistsInStorageL( Usif::TComponentId aComponentId, + CCaStorageProxy* aStorage); + + CCaInnerEntry* GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage); + + TInt AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage); + + TInt GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage); + + void RemoveAppL( TInt aUid, CCaStorageProxy* aStorage); + void CopyMmcHistory(); + + CCaSrvPlugin* LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ); + +private: + + /** + * Copys files + */ + TInt Copy( const TDesC& aSource, const TDesC& aDest ); + + CTestUtils(); + + void ConstructL(); + + RFs iFs; + CFileMan* iFileManager; + + /** + * Local Active Sheduler. + * Own. + */ + CActiveSchedulerWait* iActiveWait; +}; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/testconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/testconsts.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ +/* +* 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: +* +*/ +/* + * testconsts.h + * + * Created on: 2009-08-24 + * + */ + +#ifndef TESTCONSTS_H_ +#define TESTCONSTS_H_ + +// CONSTANTS + +//test utils + +_LIT(KTestDbSource, "C:\\testing\\data\\t_caappscanner\\castorage.db"); +_LIT(KTestDbDest, "C:\\castorage.db"); + +_LIT(KTestMmcHistSource, "C:\\testing\\data\\t_caappscanner\\mmchistory"); +_LIT(KTestMmcHistDest, "C:\\private\\2002870E\\mmchistory"); +_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); + + +//app scanner +const TInt noteApp = 0xA0000230; +const TInt notInstalledUid = 0xA0000232;// uid of not installed app +const TInt installedUid = 0xE6BC1167; // installed app +const TInt systemApp = 0x20022EF9; + +_LIT( KMmcIdValue, "00000001" ); + +_LIT( KSapiAppFileName, "c:\\sys\\bin\\sapiapp.exe"); + + +_LIT( KSapiPackageFileName, "c:\\testing\\data\\t_caappscanner\\installs\\sapiapp_S60_3_X_v_1_0_0.sisx" ); + +_LIT( KWRTMiniViewAppId, "940bed665487f773b39481523f200e54cd589764" ); +_LIT( KWRTAppId, "aaf1aaa161de8b76dc2f00a7884c10b6def6b2b1" ); +_LIT( KWrtMiniViewAppName, "AccuWeather-W3C" ); +_LIT( KWrtAppName, "UnsignedSmokeTestWGT" ); +_LIT(KTennis,"SpruceTennis"); +_LIT(KDog,"SheepdogMIDlet"); +_LIT(KHelloWorld,"HelloWorld"); +_LIT(KPhotoBrowser,"photobrowser"); +_LIT(KPhotoSuiteLauncher,"PhotoSuiteLauncher"); +_LIT(KCalendar, "Calendar"); +_LIT( KJavaAppName, "HelloWorld" ); + +#endif /* TESTCONSTS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006-2006 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: Plugin Interface +* +*/ + + +#ifndef C_WAITACTIVE_H +#define C_WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // C_WAITACTIVE_H \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_caappscanner_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/src/T_casrvAppScaner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/src/T_casrvAppScaner.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,1479 @@ +/* +* Copyright (c) 2004 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 +#include +#include +#include +#include + +#include +// CLASS HEADER +#include "T_casrvAppScaner.h" + +// EXTERNAL INCLUDES + +#include + +#include "castoragefactory.h" +#include "castorageproxy.h" +#include "casrvengutils.h" +#include "casrvappscanner.h" +#include "caappscannerhandler.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvmmchistory.h" + +#include "t_cainstaller.h" +// INTERNAL INCLUDES +#include "casrvtestutils.h" +#include "testconsts.h" + +#ifdef COVERAGE_MEASUREMENT +const double TIMEOUT_FACTOR = 1.2; +#else +const double TIMEOUT_FACTOR = 1.0; +#endif + +template +struct RClassDeleter +{ + static inline void cleanup(RClass *ptr) + { + ptr->Close(); + } +}; + +typedef RClassDeleter< RPointerArray > RInnerEntryArrayDeleter; +typedef QScopedPointer< RPointerArray, RInnerEntryArrayDeleter > + InnerEntryRArrayPointer; + +typedef RClassDeleter< RBuf > RBufDeleter; +typedef QScopedPointer< RBuf, RBufDeleter > + RBufPointer; + +using namespace Usif; + +const TUid KAppScannerHandlerPluginUid = {0x20026FAF}; + +void T_casrvAppScaner::initTestCase() +{ + + if (iTestUtils == NULL) { + TRAPD(err, iTestUtils = CTestUtils::NewL()); + QCOMPARE(err, KErrNone); + } + + QT_TRAP_THROWING(iInstaller = T_CaInstaller::NewL()); + + iTestUtils->CopyMmcHistory(); + + delete iTestUtils; + iTestUtils = NULL; +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::init() +{ + TRAPD(err, + iTestUtils = CTestUtils::NewL(); + iTestUtils->CopyDb(); + + iStorage = CCaStorageProxy::NewL(); + iSrvEngUtils = CCaSrvEngUtils::NewL(); + iScr = new Usif::RSoftwareComponentRegistry; + User::LeaveIfError(iScr->Connect()); + ); + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::cleanup() +{ + delete iSrvEngUtils; + iSrvEngUtils = NULL; + delete iStorage; + iStorage = NULL; + delete iTestUtils; + iTestUtils = NULL; + iScr->Close(); + delete iScr; + iScr = NULL; +} + +void T_casrvAppScaner::cleanupTestCase() +{ + Usif::TComponentId wrtComponentId(0); + + TRAP_IGNORE(wrtComponentId = + iInstaller->GetComponentIdForAppIdL(KWRTAppId)); + TRAP_IGNORE(iInstaller->UninstallL(wrtComponentId)); + + Usif::TComponentId wrtMiniViewComponentId(0); + TRAP_IGNORE(wrtMiniViewComponentId = + iInstaller->GetComponentIdForAppIdL(KWRTMiniViewAppId)); + TRAP_IGNORE(iInstaller->UninstallL(wrtMiniViewComponentId)); + + REComSession::FinalClose(); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_UninstalledL() +{ + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(notInstalledUid); + innerEntry->SetFlags(EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +T_casrvAppScaner::T_casrvAppScaner(): + iTestUtils(NULL), + iStorage(NULL), + iSrvEngUtils(NULL), + iScr(NULL) +{ + +} + +void T_casrvAppScaner::testHandler_LoadPlugin() +{ + TPluginParams params; + params.engUtils = iSrvEngUtils; + params.storageProxy = iStorage; + params.softwareRegistry = iScr; + + bool result(false); + + TRAPD(err, + CCaSrvPlugin *plug = iTestUtils->LoadPluginL(KAppScannerHandlerPluginUid, params); + result = plug != NULL; + delete plug; + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testHandler_New() +{ + TPluginParams params; + params.engUtils = iSrvEngUtils; + params.storageProxy = iStorage; + params.softwareRegistry = iScr; + + bool result(false); + TRAPD(err, + CCaAppScannerHandler *appScanerHandler = CCaAppScannerHandler::NewL(¶ms); + result = appScanerHandler != NULL; + delete appScanerHandler; + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testNew() +{ + bool result(false); + TRAPD(err, + Usif::RSoftwareComponentRegistry scr; + User::LeaveIfError(scr.Connect()); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr,*iSrvEngUtils); + result = appScanner != NULL; + scr.Close(); + delete appScanner; + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testUninstalled() +{ + bool exists(false); + bool is_missing(false); + TRAPD(err, + Setup_UninstalledL(); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //visible flag update + exists = iTestUtils->AppExistsInStorageL(notInstalledUid, + iStorage) == TRUE; + is_missing = (iTestUtils->GetAppFlagsL(notInstalledUid, iStorage) + & EMissing) == TRUE; + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(exists); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testInstalled() +{ + bool result(false); + TRAPD(err, + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //visible flag update + result = ((iTestUtils->GetAppFlagsL(systemApp, iStorage) + & EVisible) != FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testAddNewApp() +{ + bool result(false); + TRAPD(err, + Setup_AddNewAppL(); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + // new app added + result = ((iTestUtils->GetAppFlagsL(systemApp,iStorage) + & EVisible) != FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testNoUpdate() +{ + bool result(false); + TRAPD(err, + Setup_NoUpdateL(); + + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //no flag update + result = ((iTestUtils->GetAppFlagsL(systemApp, iStorage) + & EVisible) != FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testRemoveMmcApp() +{ + bool exist(false); + TInt flags(0); + TRAPD(err, + Setup_RemoveMmcAppL(); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //remove mmc attr + exist = iTestUtils->AppExistsInStorageL(notInstalledUid, iStorage); + flags = iTestUtils->GetAppFlagsL(notInstalledUid, iStorage); + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + TBool visible(ETrue); + visible = flags & EVisible; + QVERIFY(!visible); + QVERIFY(exist); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_casrvAppScaner::testRemoveMmcAttr() +{ + bool entryExists(false); + bool noMmcAttr(false); + TRAPD(err, + Setup_RemoveMmcAttrL(); + iInstaller->InstallL(KSapiPackageFileName); + + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //remove mmc attr + + CCaInnerEntry *entry = iTestUtils->GetAppEntryL(installedUid, iStorage); + entryExists = entry != NULL; + + CleanupStack::PushL(entry); + RBuf value; + value.CleanupClosePushL(); + value.CreateL(KCaMassStorage); + if (entryExists) { + noMmcAttr = (entry->FindAttribute(KCaAttrMmcId, value) == FALSE); + } + CleanupStack::PopAndDestroy(&value); + CleanupStack::PopAndDestroy(entry); + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(entryExists); + QVERIFY(noMmcAttr); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_casrvAppScaner::testSetCWRTAppL() +{ + RSoftwareInstall sif; + CleanupClosePushL( sif ); + User::LeaveIfError( sif.Connect() ); + + // Install the component + _LIT16( KSmokeTestUnsigned, "c:\\testing\\data\\t_caappscanner\\installs\\SmokeTestUnsigned.wgt" ); + COpaqueNamedParams* arguments; + COpaqueNamedParams* results; + arguments = COpaqueNamedParams::NewLC(); + results = COpaqueNamedParams::NewLC(); + arguments->AddIntL( KSifInParam_InstallSilently, 1 ); + TRequestStatus status; + sif.Install( KSmokeTestUnsigned, *arguments, *results, status, EFalse ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + CleanupStack::PopAndDestroy( results ); + + // Install the component + _LIT16( KAccuWeather, "c:\\testing\\data\\t_caappscanner\\installs\\AccuWeather_W3C.wgt" ); + results = COpaqueNamedParams::NewLC(); + TRequestStatus status2; + sif.Install( KAccuWeather, *arguments, *results, status2, EFalse ); + User::WaitForRequest( status2 ); + User::LeaveIfError( status2.Int() ); + CleanupStack::PopAndDestroy( results ); + CleanupStack::PopAndDestroy( arguments ); + + // Disconnect from the SIF server + CleanupStack::PopAndDestroy( &sif ); + + + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL( + *iStorage, *iScr, *iSrvEngUtils))); + + QVERIFY(!appScanner.isNull()); + + QTest::qWait(7000 * TIMEOUT_FACTOR); + //remove mmc attr + + QScopedPointer entry; + + TInt wrtUid(0); + TRAP_IGNORE( wrtUid = iTestUtils->FindAppUidL(KWrtAppName, iStorage)); + TRAPD(err, entry.reset(iTestUtils->GetAppEntryL(wrtUid, iStorage))); + QCOMPARE(err, KErrNone); + QVERIFY(!entry.isNull()); + + QCOMPARE(err, KErrNone); + + QTest::qWait(7000 * TIMEOUT_FACTOR); + + TInt wrtMiniViewUid(0); + + TRAP_IGNORE( wrtMiniViewUid = + iTestUtils->FindAppUidL( KWrtMiniViewAppName, iStorage )); + TRAP(err, entry.reset(iTestUtils->GetAppEntryL(wrtMiniViewUid, iStorage))); + QCOMPARE(err, KErrNone); + QVERIFY(!entry.isNull()); + + bool exists(false); + bool match(false); + TRAP(err, + RBuf value; + value.CleanupClosePushL(); + value.CreateL(KCaMaxAttrLenght); + exists = (entry->FindAttribute(KCaAttrAppWidgetUri, value) != 0); + match = (value == KCaAttrAppWidgetUriCWRTValue); + CleanupStack::PopAndDestroy(&value); + ); + QCOMPARE(err, KErrNone); + QVERIFY(exists); + QVERIFY(match); + + exists = false; + TRAP(err, + RBuf value; + value.CleanupClosePushL(); + value.CreateL(KCaMaxAttrLenght); + exists = (entry->FindAttribute(KCaAttrAppWidgetParamWebAppId, value) != 0); + CleanupStack::PopAndDestroy(&value); + ); + QCOMPARE(err, KErrNone); + QVERIFY(exists); + +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testRemoveMissingFlag() +{ + bool result(false); + TRAPD(err, + Setup_RemoveMissingFlagL(); + + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //remove missing flag + result = (iTestUtils->AppExistsInStorageL(notInstalledUid, + iStorage) != FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_casrvAppScaner::testRemoveMissingFlag01() +{ + bool exists(false); + bool noMissingFlag(false); + TRAPD(err, + Setup_RemoveMissingFlag01L(); + iInstaller->InstallL(KSapiPackageFileName); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //remove missing flag + exists = ((iTestUtils->GetAppFlagsL( + installedUid, iStorage) & EVisible) != FALSE); + noMissingFlag =((iTestUtils->GetAppFlagsL( + installedUid, iStorage) & EMissing) == FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(exists); + QVERIFY(noMissingFlag); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testAddMissingFlag() +{ + bool result(false); + TRAPD(err, + Setup_AddMissingFlagL(); + QTest::qWait(1000); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //Add missing flag + result = (iTestUtils->GetAppFlagsL(notInstalledUid, iStorage) + & EMissing) != FALSE; + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testSatApp() +{ + bool visibleFlag(false); + bool missingFlag(false); + TRAPD(err, + Setup_SatAppL(); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //sat app should not be updated by app scanner + visibleFlag = ((iTestUtils->GetAppFlagsL( + KSatUid.iUid, iStorage) & EVisible) != FALSE); + missingFlag = ((iTestUtils->GetAppFlagsL( + KSatUid.iUid, iStorage) & EMissing) != FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(visibleFlag); + QVERIFY(missingFlag); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testHsApp() +{ + bool visibleFlag; + TRAPD(err, + Setup_HsAppL(); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //HS app should not be updated by app scanner + visibleFlag = ((iTestUtils->GetAppFlagsL( + KHsAppUid.iUid, iStorage) & EVisible) != FALSE); + CleanupStack::PopAndDestroy(appScanner); + ); + + QCOMPARE(err, KErrNone); + QVERIFY(!visibleFlag); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_casrvAppScaner::testAddRemovable() +{ + bool result(false); + TRAPD(err, + Setup_AddRemovableL(); + iInstaller->InstallL(KSapiPackageFileName); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + //add removable flag to not visible app + result = ((iTestUtils->GetAppFlagsL( + installedUid, iStorage) & ERemovable) != FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testRemoveRemovable() +{ + bool result(false); + TRAPD(err, + Setup_RemoveRemovableL(); + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000); + //remove removable flag to not visible app + result = ((iTestUtils->GetAppFlagsL(systemApp, iStorage) + & ERemovable) == FALSE); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testRunError() +{ + bool result(false); + TRAPD(err, + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + result = (!appScanner->RunError(1)); + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_casrvAppScaner::testInstallNotifier() +{ + bool existsBeforeUninstall(false); + bool existsAfterUninstall(false); + + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils))) + + //test + TInt err(KErrNone); + TRAP(err, iInstaller->InstallL(KSapiPackageFileName)) + QCOMPARE(err, KErrNone); + QTest::qWait(7000 * TIMEOUT_FACTOR); + + TComponentId componentId(0); + TRAP(err, componentId = iInstaller->GetComponentIdL(installedUid)); + QCOMPARE(err, KErrNone); + + TRAP(err, existsBeforeUninstall = (iTestUtils->ComponentExistsInStorageL( + componentId, iStorage) != FALSE)); + QCOMPARE(err, KErrNone); + + TRAP(err, iInstaller->UninstallL(componentId)) + QCOMPARE(err, KErrNone); + + QTest::qWait(7000 * TIMEOUT_FACTOR); + + TRAP(err, existsAfterUninstall = (iTestUtils->ComponentExistsInStorageL( + componentId, iStorage) != FALSE)) + QCOMPARE(err, KErrNone); + + QVERIFY(existsBeforeUninstall); + QVERIFY(existsAfterUninstall); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testDownloadCollectionAdd() +{ + cleanup(); + init(); + TInt countAfterInstall(0); + TInt countBeforeInstall(0); + bool existsAfterInstall(false); + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils))) + + // ensure the application is not installed + TComponentId unComponentId; + + TRAP_IGNORE(unComponentId = iInstaller->GetComponentIdL(installedUid)) + + if( unComponentId > 0 ) + { + TRAP_IGNORE(iInstaller->UninstallL(unComponentId)); + } + + RPointerArray array; + InnerEntryRArrayPointer resultArray(&array); + + QScopedPointer appType; + + QT_TRAP_THROWING(appType.reset(new(ELeave) CDesC16ArrayFlat(1))); + + TRAPD(error, appType->AppendL(KCaTypeApp)); + QCOMPARE(error, KErrNone); + + QScopedPointer query; + + TRAP(error, query.reset(CCaInnerQuery::NewL())); + QCOMPARE(error, KErrNone); + + query->SetEntryTypeNames(appType.take()); + + QTest::qWait(20000 * TIMEOUT_FACTOR); + + TInt dcID(0); + + TRAP(error, dcID = appScanner->GetCollectionDownloadIdL()); + QCOMPARE(error, KErrNone); + + query->SetParentId(dcID); + query->SetFlagsOn(EVisible); + query->SetFlagsOff(EMissing); + + TRAP(error, iStorage->GetEntriesL(query.data(), *resultArray)); + QCOMPARE(error, KErrNone); + countBeforeInstall = resultArray->Count(); + + TRAP(error, iInstaller->InstallL(KSapiPackageFileName)); + QCOMPARE(error, KErrNone); + + QTest::qWait(20000 * TIMEOUT_FACTOR); + + TComponentId componentId(0); + TRAP(error, componentId = iInstaller->GetComponentIdL(installedUid)); + QCOMPARE(error, KErrNone); + + TRAP(error, iStorage->GetEntriesL(query.data(), *resultArray)); + QCOMPARE(error, KErrNone); + countAfterInstall = resultArray->Count(); + + existsAfterInstall = (iTestUtils->ComponentExistsInStorageL( + componentId, iStorage)); + + TRAP(error, iInstaller->UninstallL(componentId)); + QCOMPARE(error, KErrNone); + + QVERIFY(countAfterInstall == countBeforeInstall + 1); + QVERIFY(existsAfterInstall); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testDownloadCollectionUpdate() +{ + TInt countAfterInstall(0); + TInt countBeforeInstall(0); + bool existsAfterInstall(false); + + TComponentId unComponentId; + TRAP_IGNORE(unComponentId = iInstaller->GetComponentIdL(installedUid)) + + if( unComponentId > 0 ) + { + TRAP_IGNORE(iInstaller->UninstallL(unComponentId)); + } + + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL(*iStorage,*iScr, + *iSrvEngUtils))) + + + QTest::qWait(7000 * TIMEOUT_FACTOR); + + RPointerArray array; + InnerEntryRArrayPointer resultArray(&array); + + QScopedPointer appType; + + QT_TRAP_THROWING(appType.reset(new(ELeave) CDesC16ArrayFlat(1))) + + TRAPD(err, appType->AppendL(KCaTypeApp)) + QCOMPARE(err, KErrNone); + + QScopedPointer query; + + QT_TRAP_THROWING(query.reset(CCaInnerQuery::NewL())); + + query->SetEntryTypeNames(appType.take()); + TRAP(err, query->SetParentId(appScanner->GetCollectionDownloadIdL())); + QCOMPARE(err, KErrNone); + query->SetFlagsOn(EVisible); + query->SetFlagsOff(EMissing); + + TRAP(err, iStorage->GetEntriesL(query.data(), *resultArray)) + QCOMPARE(err, KErrNone); + + countBeforeInstall = resultArray->Count(); + resultArray->Reset(); + + TRAP(err, iInstaller->InstallL(KSapiPackageFileName)) + QCOMPARE(err, KErrNone); + + TRAP(err, iInstaller->InstallL(KSapiPackageFileName)) + QCOMPARE(err, KErrNone); + + QTest::qWait(20000 * TIMEOUT_FACTOR); + + TComponentId componentId(0); + TRAP(err, componentId = iInstaller->GetComponentIdL(installedUid)); + QCOMPARE(err, KErrNone); + + TRAP(err, iStorage->GetEntriesL(query.data(), *resultArray)) + QCOMPARE(err, KErrNone); + + countAfterInstall = resultArray->Count(); + + TRAP(err, existsAfterInstall = + (iTestUtils->ComponentExistsInStorageL( + componentId, iStorage) != FALSE)); + QCOMPARE(err, KErrNone); + + TRAP(err, iInstaller->UninstallL(componentId)) + QCOMPARE(err, KErrNone); + + QVERIFY(countAfterInstall == countBeforeInstall + 1); + QVERIFY(existsAfterInstall); +} +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testDownloadCollectionRemove() +{ + TInt countBeforeInstall(0); + TInt countAfterInstall(0); + TInt countAfterRemove(0); + bool existsAfterInstall(false); + + // ensure the application is not installed + TComponentId unComponentId; + TRAP_IGNORE(unComponentId = iInstaller->GetComponentIdL(installedUid)) + + if( unComponentId > 0 ) + { + TRAP_IGNORE(iInstaller->UninstallL(unComponentId)); + } + + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL(*iStorage,*iScr, + *iSrvEngUtils))) + + QTest::qWait(7000 * TIMEOUT_FACTOR); + + RPointerArray array; + InnerEntryRArrayPointer resultArray(&array); + + QScopedPointer appType; + + TRAPD(error, appType.reset(new(ELeave) CDesC16ArrayFlat(1))); + QCOMPARE(error, KErrNone); + + QScopedPointer query; + + TRAP(error, query.reset(CCaInnerQuery::NewL())); + QCOMPARE(error, KErrNone); + + appType->AppendL(KCaTypeApp); + + query->SetEntryTypeNames(appType.take()); + + TInt dcID(0); + + TRAP(error, dcID = appScanner->GetCollectionDownloadIdL()); + QCOMPARE(error, KErrNone); + + query->SetParentId(dcID); + query->SetFlagsOn(EVisible); + query->SetFlagsOff(EMissing); + + TRAP(error, iStorage->GetEntriesL(query.data(), *resultArray)); + QCOMPARE(error, KErrNone); + countBeforeInstall = resultArray->Count(); + + TRAP(error, iInstaller->InstallL(KSapiPackageFileName)); + QCOMPARE(error, KErrNone); + + QTest::qWait(20000 * TIMEOUT_FACTOR); + + TComponentId componentId(0); + TRAP(error, componentId = iInstaller->GetComponentIdL(installedUid)); + QCOMPARE(error, KErrNone); + + TRAP(error, iStorage->GetEntriesL(query.data(), *resultArray)); + QCOMPARE(error, KErrNone); + countAfterInstall = resultArray->Count(); + + if (countAfterInstall >= 1) { + TRAP(error, appScanner->RemoveEntryFromDownloadedL( + (*resultArray)[countAfterInstall-1]->GetId())); + QCOMPARE(error, KErrNone); + } + + RPointerArray arrayA; + InnerEntryRArrayPointer resultArrayA(&arrayA); + + TRAP(error, iStorage->GetEntriesL(query.data(), *resultArrayA)); + QCOMPARE(error, KErrNone); + countAfterRemove = resultArrayA->Count(); + + TRAP(error, existsAfterInstall = + iTestUtils->ComponentExistsInStorageL(componentId, iStorage)); + QCOMPARE(error, KErrNone); + + TRAP(error, iInstaller->UninstallL(componentId)); + QCOMPARE(error, KErrNone); + + QVERIFY(countAfterInstall == countBeforeInstall + 1); + QVERIFY(countBeforeInstall == countAfterRemove); + QVERIFY(existsAfterInstall); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testCreatePredefinedCollection() +{ + _LIT16( KPredefinedCollection, "Predefined" ); + + TInt predefinedCollectionId( 0 ); + + TRAPD(err, + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + // create predefined collection + predefinedCollectionId = appScanner->CreatePredefinedCollectionL( + KPredefinedCollection ); + + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE( err, KErrNone ); + + // clean db after test + if (predefinedCollectionId) { + RArray idsToRemove; + CleanupClosePushL(idsToRemove); + TRAP(err, idsToRemove.AppendL( predefinedCollectionId ); + iStorage->RemoveL(idsToRemove)); + CleanupStack::PopAndDestroy( &idsToRemove ); + } + + QCOMPARE(err, KErrNone); + QVERIFY(predefinedCollectionId); // all collection id from db +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testGetAllCollectionIdL() +{ + TInt allCollectionId(0); + const TInt referenceAllCollectionId(1); + + TRAPD(err, + CCaSrvAppScanner *appScanner = CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils); + CleanupStack::PushL(appScanner); + QTest::qWait(7000 * TIMEOUT_FACTOR); + // get all collection id + allCollectionId = appScanner->GetAllCollectionIdL(); + + CleanupStack::PopAndDestroy(appScanner); + ); + QCOMPARE( err, KErrNone ); + QCOMPARE( allCollectionId, referenceAllCollectionId ); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_casrvAppScaner::testUpdateComponentIdL() +{ + TBool updatedWhenNotExists = EFalse; + TBool updatedAfterInstall = EFalse; + TBool updatedWhenNoChange = EFalse; + + RBuf actualComponentId; + RBufPointer actualComponentIdPointer(&actualComponentId); + TBool componentIdAttributeFoundWhenNotExists = EFalse; + TBool componentIdAttributeFoundAfterInstall = EFalse; + + // create app scanner to test + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL(*iStorage, + *iScr, *iSrvEngUtils))) + + QScopedPointer entry; + QT_TRAP_THROWING(entry.reset(CCaInnerEntry::NewL())) + + // case 1: pass non existing application description + entry->SetUid(0); + + TRAPD(err, updatedWhenNotExists = + appScanner->UpdateComponentIdL(*entry)) + QCOMPARE(err, KErrNone); + + TRAP(err, actualComponentIdPointer->CreateL(KCaMaxAttrValueLen)) + QCOMPARE(err, KErrNone); + + componentIdAttributeFoundWhenNotExists = + entry->FindAttribute(KCaComponentId, *actualComponentIdPointer); + + + // case 2: add component id once application is installed + + // ensure the application is not installed + TComponentId unComponentId; + TRAP_IGNORE(unComponentId = iInstaller->GetComponentIdL(installedUid)) + + if( unComponentId > 0 ) + { + TRAP_IGNORE(iInstaller->UninstallL(unComponentId)); + } + + TRAP(err, iInstaller->InstallL(KSapiPackageFileName)) + QCOMPARE(err, KErrNone); + + TComponentId componentId(0); + TRAP(err, componentId = iInstaller->GetComponentIdL(installedUid)); + QCOMPARE(err, KErrNone); + + entry->SetUid(installedUid); + TRAP(err, updatedAfterInstall = + appScanner->UpdateComponentIdL(*entry)); + QCOMPARE(err, KErrNone); + + actualComponentIdPointer->Close(); + TRAP(err, actualComponentIdPointer->CreateL(KCaMaxAttrValueLen)) + QCOMPARE(err, KErrNone); + + componentIdAttributeFoundAfterInstall = + entry->FindAttribute(KCaComponentId, *actualComponentIdPointer); + + // case 3: update for application which has component id not changed + TRAP(err, updatedWhenNoChange = + appScanner->UpdateComponentIdL(*entry)) + QCOMPARE(err, KErrNone); + + QVERIFY(!updatedWhenNotExists); + QVERIFY(!componentIdAttributeFoundWhenNotExists); + QVERIFY(updatedAfterInstall); + QVERIFY(componentIdAttributeFoundAfterInstall); + QVERIFY(!updatedWhenNoChange); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testSave() +{ + bool result(false); + TRAPD(err, + RFs fs; + User::LeaveIfError(fs.Connect()); + { + CCaSrvMmcHistory* mmcHist = CCaSrvMmcHistory::NewL(); + CleanupStack::PushL( mmcHist ); + mmcHist->InsertL(1); + mmcHist->SaveL(fs, _L("c:\\testing\\data\\t_caappscanner\\testmmchist")); + CleanupStack::PopAndDestroy( mmcHist ); + + mmcHist = CCaSrvMmcHistory::NewL(); + CleanupStack::PushL( mmcHist ); + mmcHist->LoadL(fs, _L("c:\\testing\\data\\t_caappscanner\\testmmchist")); + result = (mmcHist->Find(1) != KErrNotFound); + CleanupStack::PopAndDestroy( mmcHist ); + } + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::testInsert() +{ + bool result(false); + TRAPD(err, + CCaSrvMmcHistory* mmcHist = CCaSrvMmcHistory::NewL(); + CleanupStack::PushL( mmcHist ); + mmcHist->InsertL(1); + result = (mmcHist->Find(1) != KErrNotFound); + CleanupStack::PopAndDestroy( mmcHist ); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_AddNewAppL() +{ + + TBool exists = iTestUtils->AppExistsInStorageL(systemApp, iStorage); + if (exists) { + iTestUtils->RemoveAppL(systemApp, iStorage); + exists = iTestUtils->AppExistsInStorageL(systemApp, iStorage); + if (exists) { + User::Leave(KErrNotReady); + } + } +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_NoUpdateL() +{ + + TInt flags(KErrNotFound); + CCaInnerQuery *satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid(systemApp); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + iStorage->GetEntriesL(satAppQuery, resultArray); + + if (resultArray.Count()) { + CCaInnerEntry *innerEntry = resultArray[0]; + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(systemApp); + innerEntry->SetFlags(innerEntry->GetFlags() | EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(&testName); + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(satAppQuery); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_RemoveMmcAppL() +{ + + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(notInstalledUid); + innerEntry->SetFlags(EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + innerEntry->AddAttributeL(KCaAttrMmcId, KCaMassStorage); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_RemoveMmcAttrL() +{ + + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(installedUid); + innerEntry->SetFlags(EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + innerEntry->AddAttributeL(KCaAttrMmcId, KCaMassStorage); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_RemoveMissingFlagL() +{ + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(notInstalledUid); + innerEntry->SetFlags(EVisible | EMissing); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_RemoveMissingFlag01L() +{ + + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(installedUid); + innerEntry->SetFlags(EVisible | EMissing); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_AddMissingFlagL() +{ + iTestUtils->CopyMmcHistory(); + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(notInstalledUid); + innerEntry->SetFlags(EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + innerEntry->AddAttributeL(KCaAttrMmcId, KMmcIdValue); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_SatAppL() +{ + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(KSatUid.iUid); + innerEntry->SetFlags(EVisible | EMissing); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_HsAppL() +{ + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("HsApplication")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(KHsAppUid.iUid); + innerEntry->SetFlags(0); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_AddRemovableL() +{ + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(installedUid); + innerEntry->SetFlags(innerEntry->GetFlags() & ~ERemovable | EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_casrvAppScaner::Setup_RemoveRemovableL() +{ + TInt flags(KErrNotFound); + CCaInnerQuery *satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid(systemApp); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + iStorage->GetEntriesL(satAppQuery, resultArray); + + if (resultArray.Count()) { + CCaInnerEntry *innerEntry = resultArray[0]; + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("testname_old")); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(systemApp); + innerEntry->SetFlags(innerEntry->GetFlags() | ERemovable); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrShortName, testName); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(&testName); + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(satAppQuery); +} + +void T_casrvAppScaner::testSetJavaAppL() +{ + RSoftwareInstall sif; + CleanupClosePushL( sif ); + User::LeaveIfError( sif.Connect() ); + + // Install the component + _LIT16( KHelloWorldJarPath, "c:\\testing\\data\\t_caappscanner\\HelloWorld.jar" ); + COpaqueNamedParams* arguments = NULL; + COpaqueNamedParams* results = NULL; + arguments = COpaqueNamedParams::NewLC(); + results = COpaqueNamedParams::NewLC(); + arguments->AddIntL( KSifInParam_InstallSilently, 1 ); + TRequestStatus status; + sif.Install( KHelloWorldJarPath, *arguments, *results, status, EFalse ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + + CleanupStack::PopAndDestroy( results ); + CleanupStack::PopAndDestroy( arguments ); + + // Disconnect from the SIF server + CleanupStack::PopAndDestroy( &sif ); + + + QScopedPointer appScanner; + QT_TRAP_THROWING(appScanner.reset(CCaSrvAppScanner::NewL( + *iStorage, *iScr, *iSrvEngUtils))); + + QVERIFY(!appScanner.isNull()); + + QTest::qWait(7000 * TIMEOUT_FACTOR); + + QScopedPointer entry; + + TInt javaUid(0); + TRAP_IGNORE( javaUid = iTestUtils->FindAppUidL(KJavaAppName, iStorage)); + TRAPD(err, entry.reset(iTestUtils->GetAppEntryL(javaUid, iStorage))); + QCOMPARE(err, KErrNone); + QVERIFY(!entry.isNull()); + + QCOMPARE(err, KErrNone); + + bool exists(false); + bool match(false); + TRAP(err, + RBuf value; + value.CleanupClosePushL(); + value.CreateL(KCaMaxAttrLenght); + exists = (entry->FindAttribute(KCaAttrAppType, value) != 0); + match = (value == KCaAttrAppTypeValueJava); + CleanupStack::PopAndDestroy(&value); + ); + QCOMPARE(err, KErrNone); + QVERIFY(exists); + QVERIFY(match); +} + + + +QTEST_MAIN(T_casrvAppScaner); + +// END OF FILE diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/src/casrvtestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/src/casrvtestutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,493 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#include "castorageproxy.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvplugin.h" + + +#include "waitactive.h" +#include "casrvtestutils.h" +#include "testconsts.h" + + +//----------------------------------------------------------------------- +// CONSTRUCTION +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewL() + { + CTestUtils* self = CTestUtils::NewLC(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewLC() + { + CTestUtils* self = new( ELeave ) CTestUtils(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor (virtual by CBase) +// --------------------------------------------------------------------------- +// +CTestUtils::~CTestUtils() + { + iFileManager->Delete(KTestDbDest); + iFileManager->Delete(KTestMmcHistDest); + delete iFileManager; iFileManager = NULL; + iFs.Close(); + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CTestUtils::CTestUtils() + { + + } + +// --------------------------------------------------------------------------- +// Second phase construct +// --------------------------------------------------------------------------- +// +void CTestUtils::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iFileManager = CFileMan::NewL( iFs ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CTestUtils::WaitL(TInt aMicroSec) + { + CWaitActive* wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; + } + +// --------------------------------------------------------------------------- +// CTestUtils::GetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::GetRProperty( TUid aCategory, TUint aKey, TDes& aValue ) + { + return RProperty::Get( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::GetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::GetRProperty( TUid aCategory, TUint aKey, TInt& aValue ) + { + return RProperty::Get( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::SetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::SetRProperty( TUid aCategory, TUint aKey, const TDesC& aValue ) + { + return RProperty::Set( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::SetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::SetRProperty( TUid aCategory, TUint aKey, TInt aValue ) + { + return RProperty::Set( aCategory, aKey, aValue ); + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::Copy( const TDesC& aSource, const TDesC& aDest ) + { + return iFileManager->Copy(aSource, aDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::CopyDb() + { + return Copy(KTestDbSource, KTestDbDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TBool CTestUtils::AppExistsInStorageL( TInt aUid, CCaStorageProxy* aStorage) + { + TBool exists(EFalse); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + exists = ETrue; + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return exists; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TBool CTestUtils::ComponentExistsInStorageL( Usif::TComponentId aComponentId, + CCaStorageProxy* aStorage) + { + TBool exists(EFalse); + CCaInnerQuery* appQuery = CCaInnerQuery::NewLC(); + RBuf componentIdDes; + componentIdDes.CleanupClosePushL(); + componentIdDes.CreateL( sizeof(Usif::TComponentId) + 1 ); + componentIdDes.AppendNum( aComponentId ); + + appQuery->AddAttributeL( KCaComponentId, componentIdDes ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( appQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + exists = ETrue; + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( &componentIdDes ); + CleanupStack::PopAndDestroy( appQuery ); + + return exists; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +CCaInnerEntry* CTestUtils::GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerEntry* entry = NULL; + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + entry = resultArray[0]; + resultArray.Remove(0); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return entry; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + satAppQuery->SetFlagsOff( aFlags ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TInt count = resultArray.Count(); + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return count; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage) + { + TInt flags(0); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + flags = resultArray[0]->GetFlags(); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return flags; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +void CTestUtils::RemoveAppL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + RArray idsToRemove; + CleanupClosePushL(idsToRemove); + idsToRemove.AppendL( resultArray[0]->GetId() ); + aStorage->RemoveL(idsToRemove); + CleanupStack::PopAndDestroy( &idsToRemove ); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- + +void CTestUtils::CopyMmcHistory() +{ + iFileManager->Copy( KTestMmcHistSource, KTestMmcHistDest ); +} + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TUint CTestUtils::FindAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TUint appUid(0); + for ( TInt i = 0; i < resultArray.Count(); i++ ) + { + if ( resultArray[i]->GetText() == aName ) + { + appUid = resultArray[i]->GetUid(); + } + } + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return appUid; + } + +// ----------------------------------------------------------------------------- +// +TInt CTestUtils::SimpleCloseTaskL(TInt aUid) + { + RWsSession session; + TInt error = session.Connect(); + TUid uidApp( TUid::Uid( aUid )) ; + TApaTaskList taskList( session ); + TApaTask task = taskList.FindApp( uidApp ); + + if( task.Exists() ) + { + task.EndTask(); + } + else + { + error = KErrNotFound; + } + + WaitL( 4000000 ); + session.Close(); + WaitL( 1000000 ); + + return error; + } + +// ---------------------------------------------------------------------------- +// +void CTestUtils::InstallFinishedL() + { + iActiveWait->AsyncStop(); + } + + +// --------------------------------------------------------- +// CTestUtils::LaunchApplicationL +// --------------------------------------------------------- + +CCaSrvPlugin* CTestUtils::LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ) + { + RImplInfoPtrArray infoArray; + + // Note that a special cleanup function is required to reset and destroy + // all items in the array, and then close it. + CleanupResetAndDestroyPushL( infoArray ); + CCaSrvPlugin::ListAllImplementationsL( infoArray ); + + // Loop through each info for each implementation + // and create and use each in turn + CCaSrvPlugin* plug = NULL; + for( TInt i = 0; i < infoArray.Count(); i++ ) + { + // Slice off first sub-section in the data section + TUid current_plugin = infoArray[i]->ImplementationUid(); + if ( current_plugin == aImplUid ) + { + plug = CCaSrvPlugin::NewL( current_plugin, &aPluginParams ); + break; + } + } + CleanupStack::PopAndDestroy( &infoArray ); + return plug; + } + + + + +// --------------------------------------------------------- +// CTestUtils::LaunchApplicationL +// --------------------------------------------------------- +// +TInt CTestUtils::LaunchApplicationL( const TUid aUid ) + { + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + CAknTaskList* taskList = CAknTaskList::NewL( wsSession ); + TApaTask task = taskList->FindRootApp( aUid ); + delete taskList; + + if ( task.Exists() ) + { + task.BringToForeground(); + } + else + { + TApaAppInfo appInfo; + TApaAppCapabilityBuf capabilityBuf; + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + User::LeaveIfError( appArcSession.GetAppInfo( appInfo, aUid ) ); + User::LeaveIfError( appArcSession.GetAppCapability( capabilityBuf, aUid ) ); + + TApaAppCapability& caps = capabilityBuf(); + TFileName appName = appInfo.iFullName; + CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL( appName ); + + if ( caps.iLaunchInBackground ) + { + cmdLine->SetCommandL( EApaCommandBackground ); + } + else + { + cmdLine->SetCommandL( EApaCommandRun ); + } + + User::LeaveIfError( appArcSession.StartApp( *cmdLine ) ); + + CleanupStack::PopAndDestroy( cmdLine ); + CleanupStack::PopAndDestroy( &appArcSession ); + } + CleanupStack::PopAndDestroy( &wsSession ); + + //verification if app has really launched + WaitL(20000000); + RWsSession verWsSession; + User::LeaveIfError( verWsSession.Connect() ); + CleanupClosePushL( verWsSession ); + + CAknTaskList* verTaskList = CAknTaskList::NewL( verWsSession ); + TApaTask verTask = verTaskList->FindRootApp( aUid ); + delete verTaskList; + + TInt result(KErrGeneral); + if ( verTask.Exists() ) + { + result = KErrNone; + } + CleanupStack::PopAndDestroy( &verWsSession ); + return result; + } + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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 "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } + + + + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/t_caappscanner.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/t_caappscanner.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + ../../../../tsrc/testutils/inc + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp \ + ../../../../srvsrc/cainstallnotifier.cpp \ + ../../../../srvsrc/cainstallstrategy.cpp \ + ../../../../srvsrc/casrvengutils.cpp \ + ../../../../srvsrc/castorageproxy.cpp \ + ../../../../srvsrc/casrvnotifier.cpp \ + ../../../../srvsrc/casrv.cpp \ + ../../../../srvsrc/casrvmmchistory.cpp \ + ../../../../srvsrc/casrvsession.cpp \ + ../../../../srvsrc/cabackupnotifier.cpp \ + ../../../casrvmgr/src/casrvmanager.cpp \ + ../../../../cautils/src/*.cpp \ + ../../../../castorage/src/*.cpp \ + ../../../../tsrc/testutils/src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/t_caappscanner.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/t_caappscanner.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,133 @@ +# 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: + + +TEMPLATE = app + +include(../../../../../common.pri) +include(../../../../tsrc/testutils/testutils.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../../../srvinc \ + ../../../../cautils/inc \ + ../../../casrvmgr/inc \ + ../../../../castorage/inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_caappscanner.pri) +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x2002870E + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + LIBS += \ + -lapparc \ + -lapgrfx \ + -lefsrv \ + -leuser \ + -lPlatformEnv \ + -lbafl \ + -lcamenu \ + -lcasathandler \ + -lcalocalizerscanner \ + -lcommdb \ + -lefsrv \ + -lestor \ + -lapparc \ + -lplatformenv \ + -lsysutil \ + -lapgrfx \ + -lws32 \ + -lavkon \ + -lcone \ + -lecom \ + -lsisregistryclient \ + -lWidgetRegistryClient \ + -lsqldb \ + -lcomsdbgutil \ + -lscrclient \ + -lsifnotification + + exportDB.sources = ./data/castorage.db + exportDB.path = c:/testing/data/t_caappscanner/ + + exportWRT.sources = ./data/*.wgt + exportWRT.path = c:/testing/data/t_caappscanner/installs/ + + exportMMCHistory.sources = ./data/mmchistory + exportMMCHistory.path = c:/testing/data/t_caappscanner/ + + exportARMSis.sources = ./data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx + exportARMSis.path = c:/testing/data/t_caappscanner/installs/ + + exportWINSCWSis.sources = ./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx + exportWINSCWSis.path = c:/testing/data/t_caappscanner/installs/ + + exportJava.sources = ./data/*.jar + exportJava.path = c:/testing/data/t_caappscanner/ + + BLD_INF_RULES.prj_exports += "./data/mmchistory c:/testing/data/t_caappscanner/" + BLD_INF_RULES.prj_exports += "./data/castorage.db c:/testing/data/t_caappscanner/" + BLD_INF_RULES.prj_exports += "./data/AccuWeather_W3C.wgt c:/testing/data/t_caappscanner/installs/" + BLD_INF_RULES.prj_exports += "./data/SmokeTestUnsigned.wgt c:/testing/data/t_caappscanner/installs/" + BLD_INF_RULES.prj_exports += "./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caappscanner/installs/" + BLD_INF_RULES.prj_exports += "./data/HelloWorld.jar c:/testing/data/t_caappscanner/" + + DEPLOYMENT += exportDB exportWRT exportMMCHistory exportARMSis exportJava + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} $${exportDB.path}$$basename(exportDB.sources)" + BLD_INF_RULES.prj_testexports += "./data/AccuWeather_W3C.wgt c:/testing/data/t_caappscanner/installs/" + BLD_INF_RULES.prj_testexports += "./data/SmokeTestUnsigned.wgt c:/testing/data/t_caappscanner/installs/" + BLD_INF_RULES.prj_testexports += "$${exportMMCHistory.sources} $${exportMMCHistory.path}$$basename(exportMMCHistory.sources)" + BLD_INF_RULES.prj_testexports += "$${exportWINSCWSis.sources} $${exportWINSCWSis.path}$$basename(exportWINSCWSis.sources)" + BLD_INF_RULES.prj_testexports += "./data/HelloWorld.jar c:/testing/data/t_caappscanner/" +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/t_caappscanner/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/t_caappscanner/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_caappscanner.exe -o c:\t_caappscanner.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/caappscanner/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/caappscanner/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +SUBDIRS = t_caappscanner + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/data/castorage.db Binary file contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,45 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call cd .. +call cd .. +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call make distclean +call qmake -r +call bldmake bldfiles +call abld makefile winscw +call abld reallyclean winscw +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE+./src/*" abld build winscw udeb + +call cd tsrc +call cd t_calocalizerscanner +call make distclean +call qmake -r +call bldmake bldfiles +call abld makefile winscw +call abld reallyclean winscw +call abld build winscw udeb +call \epoc32\release\winscw\udeb\t_calocalizerscanner.exe -o c:\log_dec.txt +call cd .. +call cd .. +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../.."); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE+./src/*\" sbs -j 4 -c winscw_udeb"); + + chdir("tsrc/t_calocalizerscanner"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_calocalizerscanner -o c:\\t_calocalizerscanner.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../.."); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o tsrc/t_calocalizerscanner/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o tsrc/t_calocalizerscanner/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/inc/t_calocalizerscanner.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/inc/t_calocalizerscanner.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +#ifndef T_CALOCALIZER_H +#define T_CALOCALIZER_H + +#include + +#include +#include +#include "casrvplugin.h" + +class CCaInnerEntry; +class CCaStorageProxy; +class CFileMan; +/** + * @test Test class for hsmcsserviceprovider library. + */ +class TestCaLocalizerScanner : public QObject +{ + Q_OBJECT + +private slots: + + + /** + * initialize + */ + void initTestCase(); + +/* void init(); + + * + * cleanup + + + void cleanup();*/ + + void cleanupTestCase(); + +// tests + + void TestInitializeScannerProxy(); + + void TestLoadLocalizerPlugin(); + + +private: + + //helper function to ommit debuging restriction under a trap + void TestInitializeScannerProxyTrapped(); + + //helpers + CCaInnerEntry* GetEntryById(TInt aId); + CCaSrvPlugin* LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ); + + CCaStorageProxy* iStorageProxy; + CFileMan* iFileManager; + RFs iFs; + +}; + + +#endif//T_CALOCALIZER_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_calocalizerscanner_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/src/t_calocalizerscanner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/src/t_calocalizerscanner.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,173 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + +//s60 +#include +#include +#include "cadef.h" + +#include "t_calocalizerscanner.h" + +//local +#include "calocalizerscannerproxy.h" +#include "castorageproxy.h" +#include "cainnerquery.h" +#include "cainnerentry.h" + +#include + +/* +Test must be compiled with flag +test database "./data/castorage.db " must be exported to KDBSource +*/ + + _LIT(KDBSource, "C:\\testing\\data\\localizer\\castorage.db"); + _LIT(KDBDest, "c:\\castorage.db"); + _LIT(KTextForeign, "TestString"); + _LIT(KTextLocal, "Recently added"); + const TUid KLocalizerScannerPluginUid = {0x20028709}; +// --------------------------------------------------------------------------- +// +void TestCaLocalizerScanner::initTestCase() +{ + iFs.Connect(); + + QT_TRAP_THROWING( + //copy prepared database + iFileManager = CFileMan::NewL(iFs); + iFileManager->Copy(KDBSource, KDBDest); + iStorageProxy = CCaStorageProxy::NewL(); + ); +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaLocalizerScanner::cleanupTestCase() + { + iFileManager->Delete(KDBDest); + delete iFileManager; + delete iStorageProxy; + } +/// TESTS + +/*void TestCaLocalizerScanner::TestLoadTranslator() + { + CCaLocalizerScannerProxy* localizerProxy; + localizerProxy = new CCaLocalizerScannerProxy(iStorageProxy); + localizerProxy->loadTranslator(QString("filename")); + }*/ + +void TestCaLocalizerScanner::TestLoadLocalizerPlugin() + { + TPluginParams params; + params.storageProxy = iStorageProxy; + QScopedPointer plug; + TRAP_IGNORE(plug.reset(LoadPluginL( KLocalizerScannerPluginUid, params))); + QVERIFY2(plug, "plugin not loaded"); + } + +void TestCaLocalizerScanner::TestInitializeScannerProxy() + { + TRAP_IGNORE( + TestInitializeScannerProxyTrapped(); + ); + } +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void TestCaLocalizerScanner::TestInitializeScannerProxyTrapped() + { + CCaLocalizerScannerProxy* localizerProxy; + CCaInnerEntry* entry; + // 2 is entryId of downloaded collection. + //In the test database EN_TEXT of downl. col. is 'TestString' + // after localization on english epoc it should be 'Downloaded' + entry = GetEntryById(2); + //iStorageProxy->SetDBPropertyL( KCaDbPropLanguage, KCaDbPropLanguage ); + QVERIFY2(entry->GetText().CompareC(KTextForeign) == 0, "wrong database"); + //do the localization + // localizerProxy = CCaLocalizerScannerProxy::NewL(iStorageProxy); + TPluginParams params; + params.storageProxy = iStorageProxy; + CCaSrvPlugin* plug = LoadPluginL( KLocalizerScannerPluginUid, params); + + entry = GetEntryById(2); + qDebug() << "entry->GetText()"; + qDebug() << XQConversions::s60DescToQString(entry->GetText()).toLatin1(); + QVERIFY2(entry->GetText().CompareC(KTextLocal) == 0, + "localization went wrong"); + delete plug; + } + +// ***************************************** helper functions + +CCaInnerEntry* TestCaLocalizerScanner::GetEntryById(TInt aId) + { + QScopedPointer query; + CCaInnerEntry* entry(0); + QT_TRAP_THROWING(query.reset(CCaInnerQuery::NewL())); + TRAP_IGNORE( + RArray array; + CleanupClosePushL(array); + array.Append(aId); // entry + RPointerArray resultArray; + CleanupClosePushL(resultArray); + query->SetIdsL(array); + iStorageProxy->GetEntriesL(query.data(), resultArray); + if (resultArray.Count()) + { + entry = resultArray[0]; + resultArray.Remove(0); + } + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::Pop(&array); + ); + return entry; + } + + +CCaSrvPlugin* TestCaLocalizerScanner::LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ) + { + CCaSrvPlugin* plug = NULL; + + RImplInfoPtrArray infoArray; + + // Note that a special cleanup function is required to reset and destroy + // all items in the array, and then close it. + CleanupClosePushL( infoArray ); + CCaSrvPlugin::ListAllImplementationsL( infoArray ); + + // Loop through each info for each implementation + // and create and use each in turn + for( TInt i = 0; i < infoArray.Count(); i++ ) + { + // Slice off first sub-section in the data section + TUid current_plugin = infoArray[i]->ImplementationUid(); + if ( current_plugin == aImplUid ) + { + plug = CCaSrvPlugin::NewL( current_plugin, &aPluginParams ); + break; + } + } + CleanupStack::PopAndDestroy( &infoArray ); + + return plug; + } +//#endif //Q_OS_SYMBIAN + +QTEST_MAIN(TestCaLocalizerScanner) + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,19 @@ +# +# 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: +# + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,116 @@ +# 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: + + +TEMPLATE = app + +include(../../../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../../../srvinc \ + ../../../../cautils/inc \ + ../../../casrvmgr/inc \ + ../../../../castorage/inc \ + ../../../../srvinc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_calocalizerscanner.pri) + + +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### +coverage: { + SUBDIRS += ../../ +} + CONFIG += symbian_test hb + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0x2002870C + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + SOURCES += ../../src/*.cpp + + SOURCES += ../../../../srvsrc/castorageproxy.cpp + SOURCES += ../../../../srvsrc/casrvengutils.cpp + SOURCES += ../../../../srvsrc/casrv.cpp + SOURCES += ../../../../srvsrc/casrvsession.cpp + SOURCES += ../../../../srvsrc/casrvnotifier.cpp + SOURCES += ../../../../srvsrc/cabackupnotifier.cpp + + SOURCES += ../../../../castorage/src/*.cpp + + + LIBS += -leuser \ + -lecom \ + -lcautils \ + -lcamenu \ + -lsqldb \ + -lefsrv \ + -lbafl \ + -lflogger \ + -lestor \ + -lapgrfx \ + -lapparc \ + -lcasrvmanager \ + -lsysutil \ + -lscrclient \ + -lxqutils \ + -lsifnotification + + + exports1.sources += ./data/castorage.db + exports1.path = c:/testing/data/localizer + + DEPLOYMENT += exports1 + + BLD_INF_RULES.prj_testexports += "./data/castorage.db c:/testing/data/localizer/" + +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner_installs_unix.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner_installs_unix.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,23 @@ +# +# 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: +# +# + +# Release - deploy only release version of the tests + +# + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/t_calocalizerscanner_installs_win32.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +# +# 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: +# + +testfiles.path = ../../../../bin/debug/ + +testfiles.files = ./release/t_calocalizerscanner.exe \ + +testfiles.files = ./debug/t_calocalizerscanner.exe + +INSTALLS += testfiles + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_calocalizerscanner.exe -o c:\t_calocalizerscanner.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/calocalizerscanner/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/calocalizerscanner/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs +SUBDIRS = t_calocalizerscanner + +CONFIG += ordered + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/data/castorage.db Binary file contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../../group"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE+../src/*\" sbs -j 4 -c winscw_udeb"); + + chdir("../tsrc/t_carunningappmonitor"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_carunningappmonitor -o c:\\t_carunningappmonitor.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../../group"); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../tsrc/t_carunningappmonitor/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../tsrc/t_carunningappmonitor/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/carunningappmonitortestutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/carunningappmonitortestutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,71 @@ +/* +* 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: +* +*/ +//utility class for tests +//all utility methods should be implemented here +#ifndef CA_RUNNING_APP_MONITOR_TEST_UTILS_H +#define CA_RUNNING_APP_MONITOR_TEST_UTILS_H + +#include "casrvengutils.h" +#include "casrvplugin.h" + +class CCaStorageProxy; +class CCaInnerEntry; + +class CTestUtils: public CBase +{ +public: + /**/ + virtual ~CTestUtils(); + + /**/ + static CTestUtils* NewL(); + + /**/ + static CTestUtils* NewLC(); + + TInt CopyDb(); + + TInt LaunchApplicationL( const TUid aUid ); + + TInt TerminateApplicationL( const TUid aUid ); + + void WaitL(TInt aMicroSec); + + TBool IsRunningL(TUid aAppUid, CCaStorageProxy& aStorage)const; + +private: + /** + * Copys files + */ + TInt Copy( const TDesC& aSource, const TDesC& aDest ); + + CTestUtils(); + + void ConstructL(); + + RFs iFs; + CFileMan* iFileManager; + + /** + * Local Active Sheduler. + * Own. + */ + CActiveSchedulerWait* iActiveWait; + +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/t_carunningappmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/t_carunningappmonitor.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2007 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: +* +*/ + + +#ifndef T_CA_RUNNING_APP_MONITOR_H +#define T_CA_RUNNING_APP_MONITOR_H + + +class CCaSrvPlugin; +class CTestUtils; +class CCaStorageProxy; +class CCaSrvEngUtils; +#include +#include + +class T_CaRunningAppMonitor : public QObject + { + Q_OBJECT + +private slots: + + //setup methods + void init(); + void cleanup(); + void initTestCase(); + void cleanupTestCase(); + //tests + void T_Constuction(); + + void T_RunL(); + +private: + CCaSrvPlugin* iPlugin; + + CTestUtils* iTestUtils; + + CCaStorageProxy* iStorage; + + CCaSrvEngUtils* iSrvEngUtils; + + + }; + +#endif // __T_casrvAppScaner_H__ + +// End of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/testconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/testconsts.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ +/* + * testconsts.h + * + * Created on: 2009-08-24 + * + */ + +#ifndef TESTCONSTS_H_ +#define TESTCONSTS_H_ + +// CONSTANTS + +//test utils +_LIT(KTestDbSource, "C:\\testing\\data\\t_carunningappmonitor\\castorage.db"); +_LIT(KTestDbDest, "C:\\castorage.db"); + +_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); +_LIT8( KMidletMimeType, "application/java-archive" ); + +//app scanner +const TInt noteApp = 0xA0000230; +const TInt notInstalledUid = 0xA0000232;// uid of not installed app +const TInt installedUid = 0xE6BC1167; // installed app +const TInt systemApp = 0x10005901;// system app eg. clock + +_LIT( KMmcIdValue, "00000001" ); + + +_LIT(KTennis,"SpruceTennis"); +_LIT(KDog,"SheepdogMIDlet"); +_LIT(KHelloWorld,"HelloWorld"); +_LIT(KPhotoBrowser,"photobrowser"); +_LIT(KPhotoSuiteLauncher,"PhotoSuiteLauncher"); +_LIT(KCalendar, "Calendar"); + +#endif /* TESTCONSTS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006-2006 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: Plugin Interface +* +*/ + + +#ifndef C_WAITACTIVE_H +#define C_WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // C_WAITACTIVE_H \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_carunningappmonitor_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/src/carunningappmonitortestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/src/carunningappmonitortestutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,245 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "cadef.h" +#include "castorageproxy.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvplugin.h" + + +#include "waitactive.h" +#include "carunningappmonitortestutils.h" +#include "testconsts.h" + + +//----------------------------------------------------------------------- +// CONSTRUCTION +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewL() + { + CTestUtils* self = CTestUtils::NewLC(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewLC() + { + CTestUtils* self = new( ELeave ) CTestUtils(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor (virtual by CBase) +// --------------------------------------------------------------------------- +// +CTestUtils::~CTestUtils() + { + iFileManager->Delete(KTestDbDest); + delete iFileManager; iFileManager = NULL; + iFs.Close(); + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CTestUtils::CTestUtils() + { + + } + +// --------------------------------------------------------------------------- +// Second phase construct +// --------------------------------------------------------------------------- +// +void CTestUtils::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iFileManager = CFileMan::NewL( iFs ); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::Copy( const TDesC& aSource, const TDesC& aDest ) + { + return iFileManager->Copy(aSource, aDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::CopyDb() + { + return Copy(KTestDbSource, KTestDbDest); + } + +// --------------------------------------------------------- +// +// --------------------------------------------------------- +// +TInt CTestUtils::LaunchApplicationL( const TUid aUid ) + { + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + CAknTaskList* taskList = CAknTaskList::NewL( wsSession ); + TApaTask task = taskList->FindRootApp( aUid ); + delete taskList; + + if ( task.Exists() ) + { + task.BringToForeground(); + } + else + { + TApaAppInfo appInfo; + TApaAppCapabilityBuf capabilityBuf; + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + User::LeaveIfError( appArcSession.GetAppInfo( appInfo, aUid ) ); + User::LeaveIfError( appArcSession.GetAppCapability( capabilityBuf, aUid ) ); + + TApaAppCapability& caps = capabilityBuf(); + TFileName appName = appInfo.iFullName; + CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL( appName ); + + if ( caps.iLaunchInBackground ) + { + cmdLine->SetCommandL( EApaCommandBackground ); + } + else + { + cmdLine->SetCommandL( EApaCommandRun ); + } + + User::LeaveIfError( appArcSession.StartApp( *cmdLine ) ); + + CleanupStack::PopAndDestroy( cmdLine ); + CleanupStack::PopAndDestroy( &appArcSession ); + } + CleanupStack::PopAndDestroy( &wsSession ); + + //verification if app has really launched + WaitL(2000000); + RWsSession verWsSession; + User::LeaveIfError( verWsSession.Connect() ); + CleanupClosePushL( verWsSession ); + + CAknTaskList* verTaskList = CAknTaskList::NewL( verWsSession ); + TApaTask verTask = verTaskList->FindRootApp( aUid ); + delete verTaskList; + + TInt result(KErrGeneral); + if ( verTask.Exists() ) + { + result = KErrNone; + } + CleanupStack::PopAndDestroy( &verWsSession ); + return result; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CTestUtils::TerminateApplicationL( const TUid aUid ) + { + TApaTaskList taskList(CEikonEnv::Static()->WsSession()); + TApaTask task = taskList.FindApp(aUid); + if (!task.Exists()) + { + return KErrNotFound; + } + task.EndTask(); + WaitL(2000000); + TApaTaskList newTaskList(CEikonEnv::Static()->WsSession()); + return newTaskList.FindApp(aUid).Exists() ? KErrGeneral : KErrNone; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CTestUtils::WaitL(TInt aMicroSec) + { + CWaitActive* wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CTestUtils::IsRunningL(TUid aAppUid, CCaStorageProxy& aStorage)const + { + TBool retVal(EFalse); + RPointerArray array; + CleanupResetAndDestroyPushL(array); + + CCaInnerQuery* allAppQuery = CCaInnerQuery::NewLC(); + allAppQuery->SetUid(static_cast(aAppUid.iUid)); + aStorage.GetEntriesL(allAppQuery, array); + CleanupStack::PopAndDestroy( allAppQuery ); + + if(0 >= array.Count()) + { + User::Leave(KErrNotFound); + } + CCaInnerEntry* entry = array[0]; + if( entry->GetFlags() & ERunning ) + { + RBuf value; + CleanupClosePushL(value); + value.CreateL(KCaMaxAttrValueLen); + if( entry->FindAttribute(KCaAttrWindowGroupId, value) ) + { + retVal = ETrue; + } + CleanupStack::PopAndDestroy(&value); + } + CleanupStack::PopAndDestroy(&array); + return retVal; + } diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/src/t_carunningappmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/src/t_carunningappmonitor.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2004 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_carunningappmonitor.h" +#include "carunningappmonitortestutils.h" + + +#include "cadef.h" + +#include "casrvplugin.h" +#include "castorageproxy.h" +#include "casrvengutils.h" + +TUid KTestAppUid0 = {0x20022EF9}; +TUid KTestAppUid1 = {0x20025FD9}; + +// phonebook 0x20022EF9 537014009 +// control panel 0x20025FD9 537026521 +// Bluetooth 0x10005951 268458321 +// SW Update 0x2001FE2F 537001519 +// notes 20029F80 537042816 +// file mgr 2002BCC0 537050304 +const TUid KTestedPluginUid = {0x200267B5}; + + +void T_CaRunningAppMonitor::initTestCase() +{ +} + +void T_CaRunningAppMonitor::cleanupTestCase() +{ +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaRunningAppMonitor::init() + { + //CA env + iTestUtils = CTestUtils::NewL(); + iTestUtils->CopyDb(); + iStorage = CCaStorageProxy::NewL(); + iSrvEngUtils = CCaSrvEngUtils::NewL(); + + //Plugin itself + TPluginParams params = {iStorage, iSrvEngUtils}; + iPlugin = CCaSrvPlugin::NewL(KTestedPluginUid, ¶ms); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaRunningAppMonitor::cleanup( ) + { + delete iPlugin; iPlugin = 0; + delete iSrvEngUtils; iSrvEngUtils = 0; + delete iStorage; iStorage = 0; + delete iTestUtils; iTestUtils = 0; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaRunningAppMonitor::T_Constuction() + { + //test if plugin will be loaded without proper initialization + TInt err(KErrNone); + CCaSrvPlugin* plugin(0); + + TRAP(err, plugin = CCaSrvPlugin::NewL(KTestedPluginUid,0)); + QVERIFY(err != KErrNone); + delete plugin; plugin = 0; + + TPluginParams params = {0, 0}; + TRAP(err, plugin = CCaSrvPlugin::NewL(KTestedPluginUid,¶ms)); + QVERIFY(err != KErrNone); + delete plugin; plugin = 0; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaRunningAppMonitor::T_RunL() + { + TBool appIsRunning(EFalse); + TInt err(KErrNone); + + TRAP(err, iTestUtils->LaunchApplicationL(KTestAppUid0)); + QTest::qWait(5000); + QCOMPARE(err, KErrNone); + + TRAP(err, appIsRunning = iTestUtils->IsRunningL(KTestAppUid0, *iStorage)); + QCOMPARE(err, KErrNone); + QVERIFY(appIsRunning != EFalse); + + TRAP(err, iTestUtils->TerminateApplicationL(KTestAppUid0)); + QTest::qWait(10000); + QCOMPARE(err, KErrNone); + TRAP(err, appIsRunning = iTestUtils->IsRunningL(KTestAppUid0, *iStorage)); + QTest::qWait(5000); + QCOMPARE(err, KErrNone); + QVERIFY(appIsRunning == EFalse); + + TRAP(err, iTestUtils->LaunchApplicationL(KTestAppUid1)); + QTest::qWait(10000); + QCOMPARE(err, KErrNone); + TRAP(err, appIsRunning = iTestUtils->IsRunningL(KTestAppUid1, *iStorage)); + QCOMPARE(err, KErrNone); + QVERIFY(appIsRunning != EFalse); + + + TRAP(err, iTestUtils->TerminateApplicationL(KTestAppUid1)); + QCOMPARE(err, KErrNone); + QTest::qWait(5000); + TRAP(err, appIsRunning = iTestUtils->IsRunningL(KTestAppUid1, *iStorage)); + QCOMPARE(err, KErrNone); + QVERIFY(appIsRunning == EFalse); + + } + +QTEST_MAIN(T_CaRunningAppMonitor); + +// END OF FILE diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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 "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } + + + + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/t_carunningappmonitor.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/t_carunningappmonitor.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp \ + ../../../../srvsrc/cainstallnotifier.cpp \ + ../../../../srvsrc/cainstallstrategy.cpp \ + ../../../../srvsrc/casrvengutils.cpp \ + ../../../../srvsrc/castorageproxy.cpp \ + ../../../../srvsrc/casrvnotifier.cpp \ + ../../../../srvsrc/casrv.cpp \ + ../../../../srvsrc/casrvmmchistory.cpp \ + ../../../../srvsrc/casrvsession.cpp \ + ../../../../srvsrc/cabackupnotifier.cpp \ + ../../../casrvmgr/src/casrvmanager.cpp \ + ../../../../cautils/src/*.cpp \ + ../../../../castorage/src/*.cpp \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/t_carunningappmonitor.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/t_carunningappmonitor.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,118 @@ +# 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: + + +TEMPLATE = app + +include(../../../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../../../srvinc \ + ../../../../cautils/inc \ + ../../../casrvmgr/inc \ + ../../../../castorage/inc \ + ../../../../srvinc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_carunningappmonitor.pri) +coverage: { +BLD_INF_RULES.prj_mmpfiles += "../../group/carunningappmonitor.mmp" +} +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20026FB1 + TARGET.CAPABILITY = ALL \ + -TCB -DRM + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + INCLUDEPATH += \ + ../../../../inc \ + ../../../casrvmgr/inc \ + ../../../../srvinc \ + ../../../../cautils/inc \ + ../../../../castorage/inc + + LIBS += \ + -lcastorage \ + -lcautils \ + -lcasathandler \ + -lcasrvmanager \ + -lefsrv \ + -lestor \ + -lapparc \ + -ldrmrightsinfo \ + -lplatformenv \ + -lsysutil \ + -ldrmserverinterfaces \ + -lswinstcli \ + -leuser \ + -lapgrfx \ + -lWidgetRegistryClient \ + -lws32 \ + -lbafl \ + -lavkon \ + -lcone \ + -lecom \ + -lsisregistryclient \ + -lsqldb \ + -lflogger \ + -lscrclient \ + -lsifnotification + + + + exportDB.sources = ./data/castorage.db + exportDB.path = c:/testing/data/t_carunningappmonitor/ + + DEPLOYMENT += exportDB + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} $${exportDB.path}" +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_carunningappmonitor.exe -o c:\t_carunningappmonitor.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/carunningappmonitor/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/carunningappmonitor/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +SUBDIRS = t_carunningappmonitor + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,22 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call cd ../../../group +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/data/castorage.db Binary file contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call cd ../../group + +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE=../src/*" abld build winscw udeb + +call cd ../tsrc/t_satmonitor/ + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call abld build winscw udeb diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../../group"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../src/*\" sbs -j 4 -c winscw_udeb"); + + + chdir("../tsrc/t_satmonitor"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_satmonitor -o c:\\t_satmonitor.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../../group"); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../tsrc/t_satmonitor/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../tsrc/t_satmonitor/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/T_casatmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/T_casatmonitor.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,74 @@ +/* +* 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: +* +*/ +/* + * T_casatmonitor.h + * + * Created on: 2009-09-16 + * Author: + */ + +#ifndef T_CASATMONITOR_H +#define T_CASATMONITOR_H + +class CTestUtils; +class CCaStorageProxy; +class CCaSrvManager; +#include + +#include + +// CLASS DEFINITION +class CSatMonitor; +/** + * + * Test class. + * + */ +class T_CaSatMonitor: public QObject +{ + Q_OBJECT + +private: + + void WaitL(TInt aMicroSec); + +private slots: + + //setup methods + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + + //tests for sat monitor/notifier + void testSatChange(); + +private: + + CTestUtils *iTestUtils; + + CCaStorageProxy *iStorage; + + RBuf iSatName; + + TInt iSatVis; + + CCaSrvManager *iSrvManager; +}; + +#endif // T_CASATHANDLER_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/casatmonitortestutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/casatmonitortestutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,118 @@ +/* +* 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: +* +*/ +#ifndef CA_SAT_MONITOR_TEST_UTILS_H +#define CA_SAT_MONITOR_TEST_UTILS_H + +#include "f32file.h" +#include "casrvplugin.h" + + +class CCaStorageProxy; +class CCaInnerEntry; + +class CTestUtils: public CBase +{ +public: + + /**/ + virtual ~CTestUtils(); + + /**/ + static CTestUtils* NewL(); + + /**/ + static CTestUtils* NewLC(); + + /**/ + TUint FingAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ); + + /**/ + void WaitL(TInt aMicroSec); + + /** + * Gets RProperty + */ + TInt GetRProperty( TUid aCategory, TUint aKey, TDes& aValue ); + + /** + * Gets RProperty + */ + TInt GetRProperty( TUid aCategory, TUint aKey, TInt& aValue ); + + /** + * Sets RProperty + */ + TInt SetRProperty( TUid aCategory, TUint aKey, const TDesC& aValue ); + + /** + * Sets RProperty + */ + TInt SetRProperty( TUid aCategory, TUint aKey, TInt aValue ); + + /** + * Sets RProperty + */ + TInt DefineIntRProperty( TUid aCategory, TUint aKey ); + + /** + * Sets RProperty + */ + TInt DefineTextRProperty( TUid aCategory, TUint aKey ); + + /** + * Copys test Db + */ + TInt CopyDb(); + + /** + * Checks if app exists in Db + */ + TBool AppExistsInStorageL( TInt aUid, CCaStorageProxy* aStorage); + + CCaInnerEntry* GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage); + + TInt AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage); + + TInt GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage); + + void RemoveAppL( TInt aUid, CCaStorageProxy* aStorage); + + CCaSrvPlugin* LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ); + +private: + + /** + * Copys files + */ + TInt Copy( const TDesC& aSource, const TDesC& aDest ); + + CTestUtils(); + + void ConstructL(); + + RFs iFs; + CFileMan* iFileManager; + + /** + * Local Active Sheduler. + * Own. + */ + CActiveSchedulerWait* iActiveWait; + +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/testconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/testconsts.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ +/* + * testconsts.h + * + * Created on: 2009-08-24 + * + */ + +#ifndef TESTCONSTS_H_ +#define TESTCONSTS_H_ + +// CONSTANTS + +//test utils +_LIT(KTestDbSource, "C:\\testing\\data\\t_satmonitor\\castorage.db"); +_LIT(KTestDbDest, "C:\\castorage.db"); + + +_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); + + +//app scanner +const TInt noteApp = 0xA0000230; +const TInt notInstalledUid = 0xA0000232;// uid of not installed app +const TInt installedUid = 0xE6BC1167; // installed app +const TInt systemApp = 0x10005901;// system app eg. clock + +_LIT( KMmcIdValue, "00000001" ); + +_LIT(KTennis,"SpruceTennis"); +_LIT(KDog,"SheepdogMIDlet"); +_LIT(KHelloWorld,"HelloWorld"); +_LIT(KPhotoBrowser,"photobrowser"); +_LIT(KPhotoSuiteLauncher,"PhotoSuiteLauncher"); +_LIT(KCalendar, "Calendar"); + +#endif /* TESTCONSTS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,62 @@ +/* +* 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: CWaitActive declaration +* +*/ + +#ifndef WAITACTIVE_H +#define WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // WAITACTIVE_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_satmonitor_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/src/T_casatmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/src/T_casatmonitor.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,166 @@ +/* +* 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: +* +*/ +/* + * T_casatmonitor.cpp + * + * Created on: 2009-09-16 + * Author: + */ + +// CLASS HEADER + + +#include +#include "ca2internalCRkeys.h" +#include "T_casatmonitor.h" +#include "casatmonitortestutils.h" +#include "cadef.h" +#include "waitactive.h" +#include "casrvengutils.h" +#include "castorageproxy.h" +#include "casrvmanager.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" + + +const TUid KSatPluginUid = {0x20026FAE}; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatMonitor::WaitL(TInt aMicroSec) +{ + CWaitActive *wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatMonitor::initTestCase() +{ +} + +void T_CaSatMonitor::cleanupTestCase() +{ +} + +void T_CaSatMonitor::init() +{ + iTestUtils = CTestUtils::NewL(); + iTestUtils->CopyDb(); + + iStorage = CCaStorageProxy::NewL(); + //iSrvEngUtils = CCaSrvEngUtils::NewL(); + + ///remember preconditions + iTestUtils->GetRProperty(KCRUidCa, KCaSatUIName, iSatName); + iTestUtils->GetRProperty(KCRUidCa, KCaShowSatUI, iSatVis); + iTestUtils->WaitL(1000000); + /// + + RBuf satName; + satName.CleanupClosePushL(); + satName.CreateL(_L("testname_old")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(KSatUid.iUid); + innerEntry->SetTextL(satName); + innerEntry->AddAttributeL(KCaAttrShortName, satName); + + iStorage->AddL(innerEntry); + + TInt err = iTestUtils->DefineIntRProperty(KCRUidCa, KCaShowSatUI); + err = iTestUtils->DefineTextRProperty(KCRUidCa, KCaSatUIName); + err = iTestUtils->SetRProperty(KCRUidCa, KCaShowSatUI, 1); + iTestUtils->WaitL(1000000); + iTestUtils->SetRProperty(KCRUidCa, KCaSatUIName, _L("testname_old")); + iTestUtils->WaitL(1000000); + + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&satName); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatMonitor::cleanup() +{ + ///restore preconditions + iTestUtils->SetRProperty(KCRUidCa, KCaSatUIName, iSatName); + iTestUtils->SetRProperty(KCRUidCa, KCaShowSatUI, iSatVis); + + delete iStorage; + iStorage = NULL; + delete iTestUtils; + iTestUtils = NULL; + REComSession::FinalClose(); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatMonitor::testSatChange() +{ + bool nonEmptySatList(false); + bool nameMatches(false); + TInt err(KErrNone); + + TPluginParams params; + params.engUtils = 0; + params.storageProxy = iStorage; + + TRAP(err, + CCaSrvPlugin *plug = iTestUtils->LoadPluginL(KSatPluginUid, params); + iTestUtils->WaitL(10000000);//load plugin + + RBuf newSatName; + newSatName.CleanupClosePushL(); + newSatName.CreateL(_L("testname")); + + TInt err = iTestUtils->SetRProperty( + KCRUidCa, KCaSatUIName, newSatName); + err = iTestUtils->SetRProperty( + KCRUidCa, KCaShowSatUI, 1); + iTestUtils->WaitL(10000000); + delete plug; + CCaInnerQuery *satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid(KSatUid.iUid); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + iStorage->GetEntriesL(satAppQuery, resultArray); + + nonEmptySatList = (resultArray.Count() >= 1); + nameMatches = newSatName.Compare(resultArray[0]->GetText()) == 0; + + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(satAppQuery); + CleanupStack::PopAndDestroy(&newSatName); + ); + QCOMPARE(err, KErrNone); + QVERIFY(nonEmptySatList); + QVERIFY(nameMatches); +} + +QTEST_MAIN(T_CaSatMonitor); diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/src/casatmonitortestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/src/casatmonitortestutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,367 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "castorageproxy.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvplugin.h" +#include "waitactive.h" +#include "casatmonitortestutils.h" +#include "testconsts.h" + + +//----------------------------------------------------------------------- +// CONSTRUCTION +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewL() + { + CTestUtils* self = CTestUtils::NewLC(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewLC() + { + CTestUtils* self = new( ELeave ) CTestUtils(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor (virtual by CBase) +// --------------------------------------------------------------------------- +// +CTestUtils::~CTestUtils() + { + iFileManager->Delete(KTestDbDest); + delete iFileManager; iFileManager = NULL; + iFs.Close(); + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CTestUtils::CTestUtils() + { + + } + +// --------------------------------------------------------------------------- +// Second phase construct +// --------------------------------------------------------------------------- +// +void CTestUtils::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iFileManager = CFileMan::NewL( iFs ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CTestUtils::WaitL(TInt aMicroSec) + { + CWaitActive* wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; + } + +// --------------------------------------------------------------------------- +// CTestUtils::GetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::GetRProperty( TUid aCategory, TUint aKey, TDes& aValue ) + { + return RProperty::Get( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::GetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::GetRProperty( TUid aCategory, TUint aKey, TInt& aValue ) + { + return RProperty::Get( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::SetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::SetRProperty( TUid aCategory, TUint aKey, const TDesC& aValue ) + { + return RProperty::Set( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::SetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::SetRProperty( TUid aCategory, TUint aKey, TInt aValue ) + { + return RProperty::Set( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::DefineRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::DefineTextRProperty( TUid aCategory, TUint aKey ) + { + return RProperty::Define( aCategory, aKey, RProperty::EText ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::DefineIntRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::DefineIntRProperty( TUid aCategory, TUint aKey ) + { + return RProperty::Define( aCategory, aKey, RProperty::EInt ); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::Copy( const TDesC& aSource, const TDesC& aDest ) + { + return iFileManager->Copy(aSource, aDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::CopyDb() + { + return Copy(KTestDbSource, KTestDbDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TBool CTestUtils::AppExistsInStorageL( TInt aUid, CCaStorageProxy* aStorage) + { + TBool exists(EFalse); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + exists = ETrue; + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return exists; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +CCaInnerEntry* CTestUtils::GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerEntry* entry = NULL; + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + entry = resultArray[0]; + resultArray.Remove(0); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return entry; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + satAppQuery->SetFlagsOff( aFlags ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TInt count = resultArray.Count(); + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return count; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage) + { + TInt flags(0); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + flags = resultArray[0]->GetFlags(); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return flags; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +void CTestUtils::RemoveAppL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + RArray idsToRemove; + CleanupClosePushL(idsToRemove); + idsToRemove.AppendL( resultArray[0]->GetId() ); + aStorage->RemoveL(idsToRemove); + CleanupStack::PopAndDestroy( &idsToRemove ); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TUint CTestUtils::FingAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TUint appUid(0); + for ( TInt i = 0; i < resultArray.Count(); i++ ) + { + if ( resultArray[i]->GetText() == aName ) + { + appUid = resultArray[i]->GetUid(); + } + } + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return appUid; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +CCaSrvPlugin* CTestUtils::LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ) + { + RImplInfoPtrArray infoArray; + + // Note that a special cleanup function is required to reset and destroy + // all items in the array, and then close it. + CleanupResetAndDestroyPushL( infoArray ); + CCaSrvPlugin::ListAllImplementationsL( infoArray ); + + // Loop through each info for each implementation + // and create and use each in turn + CCaSrvPlugin* plug; + for( TInt i = 0; i < infoArray.Count(); i++ ) + { + // Slice off first sub-section in the data section + TUid current_plugin = infoArray[i]->ImplementationUid(); + if ( current_plugin == aImplUid ) + { + plug = CCaSrvPlugin::NewL( current_plugin, &aPluginParams ); + CleanupStack::PushL( plug ); + TInt32 key = current_plugin.iUid; + //iPluginMap.InsertL( key, plug ); + CleanupStack::Pop( plug ); + break; + } + plug = NULL; + } + CleanupStack::PopAndDestroy( &infoArray ); + return plug; + } + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,83 @@ +/* +* 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: CWaitActive implementation +* +*/ + +#include "waitactive.h" + +#include "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/t_satmonitor.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/t_satmonitor.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp \ + ../../../../srvsrc/cainstallnotifier.cpp \ + ../../../../srvsrc/cainstallstrategy.cpp \ + ../../../../srvsrc/casrvengutils.cpp \ + ../../../../srvsrc/castorageproxy.cpp \ + ../../../../srvsrc/casrvnotifier.cpp \ + ../../../../srvsrc/casrv.cpp \ + ../../../../srvsrc/casrvmmchistory.cpp \ + ../../../../srvsrc/casrvsession.cpp \ + ../../../../srvsrc/cabackupnotifier.cpp \ + ../../../casrvmgr/src/casrvmanager.cpp \ + ../../../../cautils/src/*.cpp \ + ../../../../castorage/src/*.cpp \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/t_satmonitor.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/t_satmonitor.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,104 @@ +# 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: + + +TEMPLATE = app + +include(../../../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +coverage: { +BLD_INF_RULES.prj_mmpfiles += "../../group/casatmonitor.mmp" +} +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../../../srvinc \ + ../../../../extinc \ + ../../../../cautils/inc \ + ../../../casrvmgr/inc \ + ../../../../castorage/inc \ + ../../../../srvinc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_satmonitor.pri) + +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x2002870F + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lefsrv \ + -lestor \ + -lapparc \ + -lapgrfx \ + -lcautils \ + -lsysutil \ + -lsqldb \ + -lws32 \ + -lbafl \ + -lecom \ + -lcasrvmanager \ + -lflogger \ + -lscrclient \ + -lsifnotification + + + + exportDB.sources = ./data/castorage.db + exportDB.path = c:/testing/data/t_satmonitor/ + + DEPLOYMENT += exportDB + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} $${exportDB.path}" +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/t_satmonitor/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_satmonitor.exe -o c:\t_satmonitor.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/casatmonitor/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/casatmonitor/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +SUBDIRS = t_satmonitor + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx Binary file contentstorage/casrv/causifscanner/tsrc/t_causifscanner/data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/data/castorage.db Binary file contentstorage/casrv/causifscanner/tsrc/t_causifscanner/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx Binary file contentstorage/casrv/causifscanner/tsrc/t_causifscanner/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE+../../src/*" abld build winscw udeb \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../../src/*\" -C \"NO_EXCLUDE+../../../../srvsrc/cainstallstrategy.cpp\" sbs -j 4 -c winscw_udeb"); + + } + + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_causifscanner -o c:\\t_causifscanner.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/T_caUsifScaner.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/T_caUsifScaner.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,88 @@ +/* + * 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: + * + */ + +#ifndef __T_caUsifScanner_H__ +#define __T_caUsifScanner_H__ + +#include + +#include "casrvplugin.h" +#include "casrvmanager.h" + +// FORWARD DECLARATIONS +class CTestUtils; +class CCaStorageProxy; +class CCaSrvEngUtils; +class T_CaInstaller; + +namespace Usif{ + class RSoftwareComponentRegistry; +} + +#include + +class T_caUsifScaner : public QObject +{ + Q_OBJECT +public: + + T_caUsifScaner(); + +private slots: + + void initTestCase(); + void init(); + + void testNew(); + void testLoadPlugin(); + void testInstalled(); + void testAddNewApp(); + void testAddRemovable(); + void testInstallNotifier(); + + void testJavaStrategy(); + void testSwiStrategy(); + void testUsifStrategy(); + + + void cleanup(); + void cleanupTestCase(); + + + +private: // Data + //setup methods + + void Setup_AddNewAppL(); + void Setup_AddRemovableL(); + + CTestUtils *iTestUtils; + + CCaStorageProxy *iStorage; + + CCaSrvEngUtils *iSrvEngUtils; + + TPluginParams iPluginParams; + + T_CaInstaller *iInstaller; + + Usif::RSoftwareComponentRegistry *iScr; +}; + +#endif // __T_caUsifScanner_H__ + +// End of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/casrvtestutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/casrvtestutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,117 @@ +/* +* 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: +* +*/ +//utility class for tests +//all utility methods should be implemented here + +#include "casrvengutils.h" +#include "casrvplugin.h" + +class CCaStorageProxy; +class CCaInnerEntry; + +class CTestUtils: public CBase +{ +public: + + /**/ + virtual ~CTestUtils(); + + /**/ + static CTestUtils* NewL(); + + /**/ + static CTestUtils* NewLC(); + + /**/ + TUint FindAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ); + + /**/ + TInt LaunchApplicationL( const TUid aUid ); + + /**/ + TInt SimpleCloseTaskL(TInt aUid); + + /**/ + void WaitL(TInt aMicroSec); + + /**/ + void InstallFinishedL(); + + /** + * Gets RProperty + */ + TInt GetRProperty( TUid aCategory, TUint aKey, TDes& aValue ); + + /** + * Gets RProperty + */ + TInt GetRProperty( TUid aCategory, TUint aKey, TInt& aValue ); + + /** + * Sets RProperty + */ + TInt SetRProperty( TUid aCategory, TUint aKey, const TDesC& aValue ); + + /** + * Sets RProperty + */ + TInt SetRProperty( TUid aCategory, TUint aKey, TInt aValue ); + + /** + * Copys test Db + */ + TInt CopyDb(); + + /** + * Checks if app exists in Db + */ + TBool AppExistsInStorageL( TInt aUid, CCaStorageProxy* aStorage); + + CCaInnerEntry* GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage); + + TInt AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage); + + TInt GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage); + + TInt GetPackageFlagsL( const TDesC& aSource, CCaStorageProxy* aStorage); + + void RemoveAppL( TInt aUid, CCaStorageProxy* aStorage); + void CopyMmcHistory(); + + CCaSrvPlugin* LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ); + +private: + + /** + * Copys files + */ + TInt Copy( const TDesC& aSource, const TDesC& aDest ); + + CTestUtils(); + + void ConstructL(); + + RFs iFs; + CFileMan* iFileManager; + + /** + * Local Active Sheduler. + * Own. + */ + CActiveSchedulerWait* iActiveWait; + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/testconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/testconsts.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +/* +* 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: +* +*/ +/* + * testconsts.h + * + * Created on: 2009-08-24 + * + */ + +#ifndef TESTCONSTS_H_ +#define TESTCONSTS_H_ + +// CONSTANTS + +//test utils + +_LIT(KTestDbSource, "C:\\testing\\data\\t_causifscanner\\castorage.db"); +_LIT(KTestDbDest, "C:\\castorage.db"); + +_LIT( KSapiPackageFileName, + "c:\\testing\\data\\t_causifscanner\\installs\\sapiapp_S60_3_X_v_1_0_0.sisx" ); +_LIT( KSapiAppFileName, + "c:\\sys\\bin\\sapiapp.exe" ); +_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); + +//usif scanner +const TInt noteApp = 0xA0000230; +const TInt notInstalledUid = 0xA0000232;// uid of not installed app +const TInt installedUid = 0xE6BC1167; // installed app +const TInt systemApp = 0x20022EF9; + + +_LIT(KTennis,"SpruceTennis"); +_LIT(KDog,"SheepdogMIDlet"); +_LIT(KHelloWorld,"HelloWorld"); +_LIT(KPhotoBrowser,"photobrowser"); +_LIT(KPhotoSuiteLauncher,"PhotoSuiteLauncher"); +_LIT(KCalendar, "Calendar"); +_LIT(KSapiApp, "sapiapp"); + +#endif /* TESTCONSTS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006-2006 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: Plugin Interface +* +*/ + + +#ifndef C_WAITACTIVE_H +#define C_WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // C_WAITACTIVE_H \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_causifscanner_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/T_caUsifScaner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/T_caUsifScaner.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,285 @@ +/* +* Copyright (c) 2004 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 +#include +#include +#include + +// CLASS HEADER +#include "T_caUsifScaner.h" + +// EXTERNAL INCLUDES + +#include + +#include "castoragefactory.h" +#include "castorageproxy.h" +#include "casrvengutils.h" +#include "causifscanner.h" +#include "causifscanner.hrh" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvmmchistory.h" + +// INTERNAL INCLUDES +#include "casrvtestutils.h" +#include "testconsts.h" + +#include "t_cainstaller.h" + +#ifdef COVERAGE_MEASUREMENT +const unsigned int TIMEOUT_FACTOR = 2; +#else +const unsigned int TIMEOUT_FACTOR = 1; +#endif + +// --------------------------------------------------------------------------- +// +T_caUsifScaner::T_caUsifScaner(): + iTestUtils(NULL), + iStorage(NULL), + iSrvEngUtils(NULL) +{ +} +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::initTestCase() +{ + if (iTestUtils == NULL) { + TRAPD(err, iTestUtils = CTestUtils::NewL()); + QCOMPARE(err, KErrNone); + } + QT_TRAP_THROWING(iInstaller = T_CaInstaller::NewL()); + TRAP_IGNORE(iInstaller->InstallL(KSapiPackageFileName)); + QTest::qWait(10000); + + delete iTestUtils; + iTestUtils = NULL; +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::init() +{ + TRAPD(err, + iTestUtils = CTestUtils::NewL(); + iTestUtils->CopyDb(); + + iStorage = CCaStorageProxy::NewL(); + iSrvEngUtils = CCaSrvEngUtils::NewL(); + + iScr = new Usif::RSoftwareComponentRegistry; + User::LeaveIfError( iScr->Connect() ); + + iPluginParams.storageProxy = iStorage; + iPluginParams.engUtils = iSrvEngUtils; + iPluginParams.softwareRegistry = iScr; + ); + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::cleanup() +{ + iPluginParams.storageProxy = NULL; + iPluginParams.engUtils = NULL; + iScr->Close(); + iPluginParams.softwareRegistry = NULL; + + delete iSrvEngUtils; + iSrvEngUtils = NULL; + delete iStorage; + iStorage = NULL; + delete iTestUtils; + iTestUtils = NULL; + delete iScr; + iScr = NULL; +} +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::cleanupTestCase() +{ + TRAPD(err, iInstaller->UninstallL(KSapiAppFileName)); + QCOMPARE(err, KErrNone); + + delete iTestUtils; + iTestUtils = NULL; + + delete iInstaller; + REComSession::FinalClose(); +} + +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testNew() +{ + bool result(false); + TRAPD(err, + CCaUsifScanner *usifScanner = CCaUsifScanner::NewL(&iPluginParams); + result = usifScanner != NULL; + QTest::qWait(5000); + delete usifScanner; + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testLoadPlugin() +{ + bool result(false); + TRAPD(err, CCaSrvPlugin *plug = iTestUtils->LoadPluginL( + TUid::Uid(KCaSrvUsifScannerPlugin), iPluginParams); + result = plug != NULL; + + QTest::qWait(5000); + delete plug; + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testInstalled() +{ + bool flags(false); + TRAPD(err, + CCaUsifScanner *usifScaner = CCaUsifScanner::NewL(&iPluginParams); + CleanupStack::PushL(usifScaner); + QTest::qWait(5000); + //visible flag update + flags = ((iTestUtils->GetPackageFlagsL(KSapiApp, iStorage) + & (EVisible | ERemovable) ) != FALSE); + CleanupStack::PopAndDestroy(usifScaner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(flags); +} +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testAddNewApp() +{ + bool result(false); + TRAPD(err, + Setup_AddNewAppL(); + CCaUsifScanner *usifScaner = CCaUsifScanner::NewL(&iPluginParams); + CleanupStack::PushL(usifScaner); + QTest::qWait(5000); + // new app added + result = ((iTestUtils->GetPackageFlagsL(KSapiApp,iStorage) + & (EVisible | ERemovable)) != FALSE); + + CleanupStack::PopAndDestroy(usifScaner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testAddRemovable() +{ + bool result(false); + TRAPD(err, + Setup_AddRemovableL(); + CCaUsifScanner *usifScaner = CCaUsifScanner::NewL(&iPluginParams); + CleanupStack::PushL(usifScaner); + QTest::qWait(5000 * TIMEOUT_FACTOR); + //add removable flag to installed app + result = ((iTestUtils->GetPackageFlagsL(KSapiApp, iStorage) + & (ERemovable | EVisible)) != FALSE); + + CleanupStack::PopAndDestroy(usifScaner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testInstallNotifier() +{ + bool existsAfterInstall(false); + TRAPD(err, + CCaUsifScanner *usifScanner = CCaUsifScanner::NewL(&iPluginParams); + CleanupStack::PushL(usifScanner); + iInstaller->InstallL(KSapiPackageFileName); + QTest::qWait(20000 * TIMEOUT_FACTOR); + existsAfterInstall = iTestUtils->GetPackageFlagsL(KSapiApp, iStorage); + CleanupStack::PopAndDestroy(usifScanner); + ); + QCOMPARE(err, KErrNone); + QVERIFY(existsAfterInstall); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::Setup_AddNewAppL() +{ + TBool exists = iTestUtils->AppExistsInStorageL(installedUid, iStorage); + if (exists) { + iTestUtils->RemoveAppL(installedUid, iStorage); + exists = iTestUtils->AppExistsInStorageL(installedUid, iStorage); + if (exists) { + User::Leave(KErrNotReady); + } + } +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::Setup_AddRemovableL() +{ + RBuf testName; + testName.CleanupClosePushL(); + testName.CreateL(_L("Removable")); + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetEntryTypeNameL(KCaTypeApp); + innerEntry->SetUid(installedUid); + innerEntry->SetFlags(innerEntry->GetFlags() & ~ERemovable | EVisible); + innerEntry->SetTextL(testName); + innerEntry->AddAttributeL(KCaAttrComponentId, _L("10")); + + iStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + CleanupStack::PopAndDestroy(&testName); +} + +QTEST_MAIN(T_caUsifScaner); + +// END OF FILE diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/T_installNotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/T_installNotifier.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2004 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 +#include +#include +#include + +// CLASS HEADER +#include "T_caUsifScaner.h" + +// EXTERNAL INCLUDES + +#include + +#include "castoragefactory.h" +#include "castorageproxy.h" +#include "casrvengutils.h" +#include "causifscanner.h" +#include "causifscanner.hrh" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvmmchistory.h" +#include "cainstallnotifier.h" +#include "cammcwatcher.h" +#include "cainstallstrategy.h" + +// INTERNAL INCLUDES +#include "casrvtestutils.h" +#include "testconsts.h" + +#ifdef COVERAGE_MEASUREMENT +const unsigned int TIMEOUT_FACTOR = 2; +#else +const unsigned int TIMEOUT_FACTOR = 1; +#endif + +class TTestsListener : public MCaInstallListener, public MMmcWatcherCallback + { +public: + void HandleInstallNotifyL(TInt aEvent) + { + iStatus = ETrue; + } + + virtual void MmcChangeL() + { + iStatus = ETrue; + } + + TBool iStatus; + }; +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testJavaStrategy() +{ + bool result(false); + + TTestsListener listener; + listener.iStatus = EFalse; + + TRAPD(err, + RProperty property; + CCaJavaInstallStrategy *installStrategy = + CCaJavaInstallStrategy::NewL( property ); + + installStrategy->NotifyListenerL( property, listener ); + result = installStrategy != NULL; + delete installStrategy; + property.Close(); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); + QVERIFY(listener.iStatus != EFalse); +} + +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testUsifStrategy() +{ + + bool result(false); + + TTestsListener listener; + listener.iStatus = EFalse; + + TRAPD(err, + RProperty property; + CCaUsifUninstallStrategy *installStrategy = + CCaUsifUninstallStrategy::NewL( property ); + result = installStrategy != NULL; + installStrategy->NotifyListenerL( property, listener ); + + delete installStrategy; + property.Close(); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); + QVERIFY(listener.iStatus == EFalse); +} + +// --------------------------------------------------------------------------- +// +void T_caUsifScaner::testSwiStrategy() +{ + + bool result(false); + + TTestsListener listener; + listener.iStatus = EFalse; + + TRAPD(err, + RProperty property; + CCaSwiInstallStrategy *installStrategy = + CCaSwiInstallStrategy::NewL( property ); + + installStrategy->NotifyListenerL( property, listener ); + result = installStrategy != NULL; + delete installStrategy; + property.Close(); + ); + QCOMPARE(err, KErrNone); + QVERIFY(result); + QVERIFY(listener.iStatus != EFalse); +} + + +// END OF FILE diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/casrvtestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/casrvtestutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,496 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "castorageproxy.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvplugin.h" + + +#include "waitactive.h" +#include "casrvtestutils.h" +#include "testconsts.h" + + +//----------------------------------------------------------------------- +// CONSTRUCTION +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewL() + { + CTestUtils* self = CTestUtils::NewLC(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewLC() + { + CTestUtils* self = new( ELeave ) CTestUtils(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor (virtual by CBase) +// --------------------------------------------------------------------------- +// +CTestUtils::~CTestUtils() + { + iFileManager->Delete(KTestDbDest); + delete iFileManager; iFileManager = NULL; + iFs.Close(); + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CTestUtils::CTestUtils() + { + + } + +// --------------------------------------------------------------------------- +// Second phase construct +// --------------------------------------------------------------------------- +// +void CTestUtils::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iFileManager = CFileMan::NewL( iFs ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CTestUtils::WaitL(TInt aMicroSec) + { + CWaitActive* wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; + } + +// --------------------------------------------------------------------------- +// CTestUtils::GetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::GetRProperty( TUid aCategory, TUint aKey, TDes& aValue ) + { + return RProperty::Get( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::GetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::GetRProperty( TUid aCategory, TUint aKey, TInt& aValue ) + { + return RProperty::Get( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::SetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::SetRProperty( TUid aCategory, TUint aKey, const TDesC& aValue ) + { + return RProperty::Set( aCategory, aKey, aValue ); + } + +// --------------------------------------------------------------------------- +// CTestUtils::SetRProperty +// --------------------------------------------------------------------------- +// +TInt CTestUtils::SetRProperty( TUid aCategory, TUint aKey, TInt aValue ) + { + return RProperty::Set( aCategory, aKey, aValue ); + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::Copy( const TDesC& aSource, const TDesC& aDest ) + { + return iFileManager->Copy(aSource, aDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::CopyDb() + { + return Copy(KTestDbSource, KTestDbDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TBool CTestUtils::AppExistsInStorageL( TInt aUid, CCaStorageProxy* aStorage) + { + TBool exists(EFalse); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + exists = ETrue; + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return exists; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +CCaInnerEntry* CTestUtils::GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerEntry* entry = NULL; + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + entry = resultArray[0]; + resultArray.Remove(0); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return entry; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + satAppQuery->SetFlagsOff( aFlags ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TInt count = resultArray.Count(); + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return count; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage) + { + TInt flags(0); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + flags = resultArray[0]->GetFlags(); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return flags; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::GetPackageFlagsL( + const TDesC& aSource, CCaStorageProxy* aStorage) + { + TInt flags(0); + + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = new ( ELeave ) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypePackage ); + satAppQuery->SetEntryTypeNames( appType ); + CleanupStack::Pop( appType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + for( TInt i = 0; i < resultArray.Count(); i++ ) + { + if ( resultArray[i]->GetText().Compare( aSource ) == KErrNone ) + { + flags = resultArray[i]->GetFlags(); + } + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return flags; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +void CTestUtils::RemoveAppL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerQuery* appQuery = CCaInnerQuery::NewLC(); + appQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( appQuery, resultArray ); + + if ( resultArray.Count() ) + { + RArray idsToRemove; + CleanupClosePushL(idsToRemove); + idsToRemove.AppendL( resultArray[0]->GetId() ); + aStorage->RemoveL(idsToRemove); + CleanupStack::PopAndDestroy( &idsToRemove ); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( appQuery ); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- + +void CTestUtils::CopyMmcHistory() +{ +// iFileManager->Copy( KTestMmcHistSource, KTestMmcHistDest ); +} + + +//----------------------------------------------------------------------- + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TUint CTestUtils::FindAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TUint appUid(0); + for ( TInt i = 0; i < resultArray.Count(); i++ ) + { + if ( resultArray[i]->GetText() == aName ) + { + appUid = resultArray[i]->GetUid(); + } + } + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return appUid; + } + +// ----------------------------------------------------------------------------- +// +TInt CTestUtils::SimpleCloseTaskL(TInt aUid) + { + RWsSession session; + TInt error = session.Connect(); + TUid uidApp( TUid::Uid( aUid )) ; + TApaTaskList taskList( session ); + TApaTask task = taskList.FindApp( uidApp ); + + if( task.Exists() ) + { + task.EndTask(); + } + else + { + error = KErrNotFound; + } + + WaitL( 4000000 ); + session.Close(); + WaitL( 1000000 ); + + return error; + } + +// ---------------------------------------------------------------------------- +// +void CTestUtils::InstallFinishedL() + { + iActiveWait->AsyncStop(); + } + + +// --------------------------------------------------------- +// CTestUtils::LaunchApplicationL +// --------------------------------------------------------- + +CCaSrvPlugin* CTestUtils::LoadPluginL( TUid aImplUid, TPluginParams aPluginParams ) + { + RImplInfoPtrArray infoArray; + + // Note that a special cleanup function is required to reset and destroy + // all items in the array, and then close it. + CleanupResetAndDestroyPushL( infoArray ); + CCaSrvPlugin::ListAllImplementationsL( infoArray ); + + // Loop through each info for each implementation + // and create and use each in turn + CCaSrvPlugin* plug = NULL; + for( TInt i = 0; i < infoArray.Count(); i++ ) + { + // Slice off first sub-section in the data section + TUid current_plugin = infoArray[i]->ImplementationUid(); + if ( current_plugin == aImplUid ) + { + plug = CCaSrvPlugin::NewL( current_plugin, &aPluginParams ); + break; + } + } + CleanupStack::PopAndDestroy( &infoArray ); + return plug; + } + + + + +// --------------------------------------------------------- +// CTestUtils::LaunchApplicationL +// --------------------------------------------------------- +// +TInt CTestUtils::LaunchApplicationL( const TUid aUid ) + { + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + CAknTaskList* taskList = CAknTaskList::NewL( wsSession ); + TApaTask task = taskList->FindRootApp( aUid ); + delete taskList; + + if ( task.Exists() ) + { + task.BringToForeground(); + } + else + { + TApaAppInfo appInfo; + TApaAppCapabilityBuf capabilityBuf; + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + User::LeaveIfError( appArcSession.GetAppInfo( appInfo, aUid ) ); + User::LeaveIfError( appArcSession.GetAppCapability( capabilityBuf, aUid ) ); + + TApaAppCapability& caps = capabilityBuf(); + TFileName appName = appInfo.iFullName; + CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL( appName ); + + if ( caps.iLaunchInBackground ) + { + cmdLine->SetCommandL( EApaCommandBackground ); + } + else + { + cmdLine->SetCommandL( EApaCommandRun ); + } + + User::LeaveIfError( appArcSession.StartApp( *cmdLine ) ); + + CleanupStack::PopAndDestroy( cmdLine ); + CleanupStack::PopAndDestroy( &appArcSession ); + } + CleanupStack::PopAndDestroy( &wsSession ); + + //verification if app has really launched + WaitL(20000000); + RWsSession verWsSession; + User::LeaveIfError( verWsSession.Connect() ); + CleanupClosePushL( verWsSession ); + + CAknTaskList* verTaskList = CAknTaskList::NewL( verWsSession ); + TApaTask verTask = verTaskList->FindRootApp( aUid ); + delete verTaskList; + + TInt result(KErrGeneral); + if ( verTask.Exists() ) + { + result = KErrNone; + } + CleanupStack::PopAndDestroy( &verWsSession ); + return result; + } + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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 "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } + + + + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/t_causifscanner.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/t_causifscanner.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + ./../../../../tsrc/testutils/inc + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp \ + ../../../../srvsrc/cainstallnotifier.cpp \ + ../../../../srvsrc/cainstallstrategy.cpp \ + ../../../../srvsrc/casrvengutils.cpp \ + ../../../../srvsrc/castorageproxy.cpp \ + ../../../../srvsrc/casrvnotifier.cpp \ + ../../../../srvsrc/casrv.cpp \ + ../../../../srvsrc/casrvmmchistory.cpp \ + ../../../../srvsrc/casrvsession.cpp \ + ../../../../srvsrc/cabackupnotifier.cpp \ + ../../../../cautils/src/*.cpp \ + ../../../../castorage/src/*.cpp \ + ../../../casrvmgr/src/casrvmanager.cpp \ + ../../../../tsrc/testutils/src/*.cpp diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/t_causifscanner.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/t_causifscanner.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,117 @@ +# 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: + + +TEMPLATE = app + +include(../../../../../common.pri) +include(../../../../tsrc/testutils/testutils.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../../../srvinc \ + ../../../../cautils/inc \ + ../../../../castorage/inc \ + ../../../casrvmgr/inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_causifscanner.pri) + +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x2002DCF2 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -lapparc \ + -lapgrfx \ + -lefsrv \ + -leuser \ + -lPlatformEnv \ + -lbafl \ + -lcamenu \ + -lcasathandler \ + -lcalocalizerscanner \ + -lcommdb \ + -lefsrv \ + -lestor \ + -lapparc \ + -lplatformenv \ + -lsysutil \ + -lswinstcli \ + -lapgrfx \ + -lws32 \ + -lavkon \ + -lcone \ + -lecom \ + -lsisregistryclient \ + -lsqldb \ + -lcomsdbgutil \ + -lsif \ + -lscrclient \ + -lsifnotification + + + exportDB.sources = ./data/castorage.db + exportDB.path = c:/testing/data/t_causifscanner/ + + exportARMSis.sources = ./data/armv5/sapiapp_S60_3_X_v_1_0_0.sisx + exportARMSis.path = c:/testing/data/t_causifscanner/installs/ + + exportWINSCWSis.sources = ./data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx + exportWINSCWSis.path = c:/testing/data/t_causifscanner/installs/ + + DEPLOYMENT += exportARMSis \ + exportDB + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} $${exportDB.path}$$basename(exportDB.sources)" + BLD_INF_RULES.prj_testexports += "$${exportWINSCWSis.sources} $${exportWINSCWSis.path}$$basename(exportWINSCWSis.sources)" + BLD_INF_RULES.prj_exports += "$${exportDB.sources} $${exportDB.path}$$basename(exportDB.sources)" + BLD_INF_RULES.prj_exports += "$${exportWINSCWSis.sources} $${exportWINSCWSis.path}$$basename(exportWINSCWSis.sources)" +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/causifscanner/tsrc/t_causifscanner/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/causifscanner/tsrc/t_causifscanner/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_causifscanner.exe -o c:\t_causifscanner.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/castorage.db Binary file contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/createsisx.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/createsisx.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,31 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +makesis validwidget1.pkg +signsis validwidget1.SIS validwidget1.SISX c:\cert\rd.cer c:\cert\rd-key.pem +del validwidget1.SIS + +makesis validwidget2.pkg +signsis validwidget2.SIS validwidget2.SISX c:\cert\rd.cer c:\cert\rd-key.pem +del validwidget2.SIS + +makesis validwidget3.pkg +signsis validwidget3.SIS validwidget3.SISX c:\cert\rd.cer c:\cert\rd-key.pem +del validwidget3.SIS + +makesis validwidget4.pkg +signsis validwidget4.SIS validwidget4.SISX c:\cert\rd.cer c:\cert\rd-key.pem +del validwidget4.SIS \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget1.SISX Binary file contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget1.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget1.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget1.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + testwidgetprovider + testwidget + TestWidget + test.png + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget1.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget1.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +; +; 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: +; + +;Language - standard language definitions +&EN + +; standard sis file header +#{"validWidget"},(0x20053785),1,0,0 + +;Localised Vendor name +%{"Forum Nokia"} + +;Unique Vendor name +:"Forum Nokia" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +;Files to include. Check the source paths they match your SDK setup. +"validwidget1.manifest" - "c:\private\140d33a9\import\widgetregistry\20053785\validwidget1.manifest" +"validwidget1.manifest" - "c:\private\a14e9d99\import\widgetregistry\20053785\validwidget1.manifest" +"validwidget1.manifest" - "c:\private\20022F35\import\widgetregistry\20053785\validwidget1.manifest" \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget2.SISX Binary file contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget2.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget2.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget2.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,9 @@ + + + testwidgetprovider22 + testwidget22 + txt_applib_subtitle_downloads + widgettranslation + test.png + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget2.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget2.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +; +; 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: +; + +;Language - standard language definitions +&EN + +; standard sis file header +#{"validWidget"},(0x20053785),1,0,0 + +;Localised Vendor name +%{"Forum Nokia"} + +;Unique Vendor name +:"Forum Nokia" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +;Files to include. Check the source paths they match your SDK setup. +"validwidget2.manifest" - "c:\private\140d33a9\import\widgetregistry\20053785\validwidget2.manifest" +"validwidget2.manifest" - "c:\private\a14e9d99\import\widgetregistry\20053785\validwidget2.manifest" +"validwidget2.manifest" - "c:\private\20022F35\import\widgetregistry\20053785\validwidget2.manifest" +"widgettranslation_en_GB.qm" - "c:\resource\qt\translations\widgettranslation_en_GB.qm" \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget3.SISX Binary file contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget3.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget3.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget3.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + testwidgetprovider33 + testwidget22 + TestWidget3 + test.png + \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget3.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget3.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +; +; 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: +; + +;Language - standard language definitions +&EN + +; standard sis file header +#{"validWidget"},(0x20053785),1,0,0 + +;Localised Vendor name +%{"Forum Nokia"} + +;Unique Vendor name +:"Forum Nokia" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +;Files to include. Check the source paths they match your SDK setup. +"validwidget3.manifest" - "c:\private\140d33a9\import\widgetregistry\20053785\validwidget3.manifest" +"validwidget3.manifest" - "c:\private\a14e9d99\import\widgetregistry\20053785\validwidget3.manifest" +"validwidget3.manifest" - "c:\private\20022F35\import\widgetregistry\20053785\validwidget3.manifest" + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget4.SISX Binary file contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget4.SISX has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget4.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget4.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + testwidget44 + TestWidget4 + test.png + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget4.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/validwidget4.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +; +; 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: +; + +;Language - standard language definitions +&EN + +; standard sis file header +#{"validWidget"},(0x20053785),1,0,0 + +;Localised Vendor name +%{"Forum Nokia"} + +;Unique Vendor name +:"Forum Nokia" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +;Files to include. Check the source paths they match your SDK setup. +"validwidget4.manifest" - "c:\private\140d33a9\import\widgetregistry\20053785\validwidget4.manifest" +"validwidget4.manifest" - "c:\private\a14e9d99\import\widgetregistry\20053785\validwidget4.manifest" +"validwidget4.manifest" - "c:\private\20022F35\import\widgetregistry\20053785\validwidget4.manifest" + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/widgettranslation_en_GB.qm Binary file contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/data/widgettranslation_en_GB.qm has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE=../../src/*" abld build winscw udeb diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../../src/*\" sbs -j 4 -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_cawidgetscanner -o c:\\t_cawidgetscanner.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/cawidgetscannertestutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/cawidgetscannertestutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,104 @@ +/* +* 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: +* +*/ +#ifndef CA_WIDGET_SCANNER_TEST_UTILS_H +#define CA_WIDGET_SCANNER_TEST_UTILS_H +//utility class for tests +//all utility methods should be implemented here + +//#include "casrvengutils.h" +#include "f32file.h" +#include "casrvplugin.h" + + +class CCaStorageProxy; +class CCaInnerEntry; +class CCaWidgetDescription; + +class CTestUtils: public CBase +{ +public: + + /**/ + virtual ~CTestUtils(); + + /**/ + static CTestUtils* NewL(); + + /**/ + static CTestUtils* NewLC(); + + TUint FindAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ); + + /**/ + /**/ + TInt SimpleCloseTaskL(TInt aUid); + void WaitL(TInt aMicroSec); + /**/ + void InstallFinishedL(); + + /** + * Copys test Db + */ + TInt CopyDb(); + + /** + * Checks if app exists in Db + */ + TInt WidgetsCountL( CCaStorageProxy* aStorage ); + + TBool WidgetExistsInStorageL( const TDesC& aName, const TDesC& aValue, CCaStorageProxy* aStorage); + + CCaInnerEntry* GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage); + + CCaWidgetDescription* GetWidgetEntryL( const TDesC& aText, CCaStorageProxy* aStorage); + + TInt GetWidgetFlagsL(const TDesC& aText, CCaStorageProxy* aStorage); + + TInt AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage); + + TInt GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage); + + void RemoveAppL( TInt aUid, CCaStorageProxy* aStorage); + + CCaSrvPlugin* LoadPluginL( TUid aImplUid, TPluginParams* aPluginParams ); + + /** + * Copys files + */ + TInt Copy( const TDesC& aSource, const TDesC& aDest ); + + TInt RemoveL( const TDesC& aFile ); + +private: + + + CTestUtils(); + + void ConstructL(); + + RFs iFs; + CFileMan* iFileManager; + + /** + * Local Active Sheduler. + * Own. + */ + CActiveSchedulerWait* iActiveWait; + +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/t_cawidgetscanner.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/t_cawidgetscanner.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,110 @@ +/* +* 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: +* +*/ +/* + * T_cahswidgetscanner.h + * + * Created on: 2009-09-16 + * Author: + */ + +#ifndef T_CAWIDGETSCANNER_H +#define T_CAWIDGETSCANNER_H + +class CTestUtils; +class CCaStorageProxy; +class CCaSrvManager; +class CCaSrvEngUtils; +class T_CaInstaller; +class CCaSrvPlugin; + +#include + +#include +#include + + + +namespace Usif{ + class RSoftwareComponentRegistry; +} + + +class T_CaWidgetScanner: public QObject + { + Q_OBJECT + +private: + + void WaitL(TInt aMicroSec); + TInt AppendMmcIdL(const TDesC& aText); + TBool MmcAttributeSetL(TInt aId); + void createImportDirectoryL(); + + void testUpdateWidgetTrapped(); + void testUpdateTheSameWidgetTrapped(); + void testUpdateMmcRemoveInsertTrapped(); + +private slots: + + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + + //tests for widget scanner + + void testPluginNewL(); + void testRemoveMmcWidget(); + void testUpdateMmcRemoveInsert(); + void testAddWidget(); + void testUpdateWidget(); + void testUpdateTheSameWidget(); + void testRemoveWidget(); + void testSetMissingFlag(); + void testSetLocalizationsL(); + void testUtils(); + void testParsePreviewImageName(); + void testParseIconName(); + void testCloneWidgetDescriptionL(); + + +private: + + CTestUtils* iTestUtils; + + CCaSrvEngUtils* iSrvEngUtils; + + Usif::RSoftwareComponentRegistry *iScr; + + CCaStorageProxy* iStorage; + + RFs iFs; + + RBuf iImportPath; + RBuf iWidgetScanFolder; + RBuf iWidgetScanFile1; + + CCaSrvPlugin* iPlugin; + + + CCaSrvManager* iSrvManager; + + T_CaInstaller *iInstaller; + }; + +#endif // T_CAWIDGETSCANNER_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/testconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/testconsts.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ +/* + * testconsts.h + * + * Created on: Oct 15, 2009 + * Author: michal.wojcik + */ + +#ifndef TESTCONSTS_H_ +#define TESTCONSTS_H_ + +// CONSTANTS + +//test utils +_LIT( KTestDbSource, "C:\\testing\\data\\t_cawidgetscanner\\castorage.db" ); +_LIT( KTestDbDest, "C:\\castorage.db" ); + +// hswidgets + +_LIT( KHSWidget1, "C:\\testing\\data\\t_cawidgetscanner\\validwidget1.manifest" ); +_LIT( KHSWidget2, "C:\\testing\\data\\t_cawidgetscanner\\validwidget2.manifest" ); +_LIT( KHSWidgetRemoveFolder, "import\\widgetregistry\\20053785\\validwidget1.manifest" ); +_LIT( KHSWidgetScanFolder, "import\\widgetregistry\\20053785\\" ); +_LIT( KDriveC, "c:" ); +_LIT( KPrivate, "C:\\private\\20022F35\\" ); + +_LIT( KImport, "\\import" ); +_LIT( KManifestFile1, "validwidget1.manifest" ); +_LIT( KManifestFile2, "validwidget2.manifest" ); + + + + +#endif /* TESTCONSTS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/waitactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/inc/waitactive.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,62 @@ +/* +* 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: CWaitActive declaration +* +*/ + +#ifndef WAITACTIVE_H +#define WAITACTIVE_H + +#include + +/** + * Helper wait active class + */ + class CWaitActive : public CTimer + { + +public: + + + static CWaitActive* NewL( ); + + ~CWaitActive(); + + void Wait(TTimeIntervalMicroSeconds32 anInterval); + +protected: + + /** + * From CActive, RunL. + * Handles the active object’s request completion event + */ + void RunL(); + + +private: + + CWaitActive(); + + void ConstructL(); + +private: + + /* + * Own. + */ + CActiveSchedulerWait* iActiveScheduler; + }; + + +#endif // WAITACTIVE_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_cawidgetscanner_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\..\sis\rd.cer -key ..\..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/cawidgetscannertestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/cawidgetscannertestutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,474 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "castorageproxy.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "casrvplugin.h" +#include "waitactive.h" +#include "cawidgetscannertestutils.h" +#include "testconsts.h" +#include "WidgetScannerUtils.h" +#include "CaWidgetDescription.h" + +#include "cawidgetscannerdef.h" + +//----------------------------------------------------------------------- +// CONSTRUCTION +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewL() + { + CTestUtils* self = CTestUtils::NewLC(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewLC() + { + CTestUtils* self = new( ELeave ) CTestUtils(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor (virtual by CBase) +// --------------------------------------------------------------------------- +// +CTestUtils::~CTestUtils() + { + iFileManager->Delete(KTestDbDest); + delete iFileManager; iFileManager = NULL; + iFs.Close(); + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CTestUtils::CTestUtils() + { + + } + +// --------------------------------------------------------------------------- +// Second phase construct +// --------------------------------------------------------------------------- +// +void CTestUtils::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iFileManager = CFileMan::NewL( iFs ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CTestUtils::WaitL(TInt aMicroSec) + { + CWaitActive* wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::Copy( const TDesC& aSource, const TDesC& aDest ) + { + iFs.MkDirAll(aDest); + return iFileManager->Copy( aSource, aDest ); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::RemoveL( const TDesC& aFile ) + { + return iFs.Delete( aFile ); + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::CopyDb() + { + return Copy( KTestDbSource, KTestDbDest ); + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::WidgetsCountL( CCaStorageProxy* aStorage ) + { + TInt count(0); + CCaInnerQuery* widQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeWidget ); + widQuery->SetEntryTypeNames(appType); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( widQuery, resultArray ); + + if ( resultArray.Count() ) + { + count = resultArray.Count(); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( widQuery ); + + return count; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TBool CTestUtils::WidgetExistsInStorageL( const TDesC& aAtrName, const TDesC& aValue, CCaStorageProxy* aStorage) + { + TBool exists(EFalse); + CCaInnerQuery* widQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeWidget ); + widQuery->SetEntryTypeNames(appType); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + RCaEntryAttrArray attrArray; + //CleanupResetAndDestroyPushL( attrArray ); + aStorage->GetEntriesL( widQuery, resultArray ); + RBuf library; + library.Create(KCaMaxAttrLenght); + + if ( resultArray.Count() ) + { + for(int i(0); iGetAttributes(); + attrArray.Find( aAtrName, library ); + if(library.Length()>0 && library == aValue) + { + exists = ETrue; + } + } + } + library.Close(); + // CleanupStack::PopAndDestroy( &attrArray ); + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( widQuery ); + + return exists; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +CCaInnerEntry* CTestUtils::GetAppEntryL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerEntry* entry = NULL; + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + entry = resultArray[0]; + resultArray.Remove(0); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return entry; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +CCaWidgetDescription* CTestUtils::GetWidgetEntryL(const TDesC& aText, CCaStorageProxy* aStorage) + { + CCaWidgetDescription* widget = NULL; + + CCaInnerQuery* query = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* widgetType = new ( ELeave ) CDesC16ArrayFlat( + KGranularityOne ); + CleanupStack::PushL( widgetType ); + widgetType->AppendL( KCaTypeWidget ); + query->SetEntryTypeNames( widgetType );//transfers ownership to query + CleanupStack::Pop( widgetType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( query, resultArray ); + + if ( resultArray.Count() ) + { + for (TInt i=0; i< resultArray.Count(); i++) + { + if ( resultArray[i]->GetText() == aText ) + { + widget = CCaWidgetDescription::NewLC(resultArray[i]); + CleanupStack::Pop( widget ); + } + } + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( query ); + + return widget; + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::GetWidgetFlagsL(const TDesC& aText, CCaStorageProxy* aStorage) + { + + TInt flags(0); + CCaInnerQuery* query = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* widgetType = new ( ELeave ) CDesC16ArrayFlat( + KGranularityOne ); + CleanupStack::PushL( widgetType ); + widgetType->AppendL( KCaTypeWidget ); + query->SetEntryTypeNames( widgetType );//transfers ownership to query + CleanupStack::Pop( widgetType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( query, resultArray ); + + if ( resultArray.Count() ) + { + for (TInt i=0; i< resultArray.Count(); i++) + { + if ( resultArray[i]->GetText() == aText ) + { + + CCaInnerEntry* poin = resultArray[i]; + flags = resultArray[i]->GetFlags(); + } + } + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( query ); + + return flags; + } +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::AppsWithFlagsOffL( TInt aFlags, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + satAppQuery->SetFlagsOff( aFlags ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TInt count = resultArray.Count(); + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return count; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::GetAppFlagsL( TInt aUid, CCaStorageProxy* aStorage) + { + TInt flags(0); + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + flags = resultArray[0]->GetFlags(); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return flags; + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +void CTestUtils::RemoveAppL( TInt aUid, CCaStorageProxy* aStorage) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + satAppQuery->SetUid( aUid ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + if ( resultArray.Count() ) + { + CCaInnerEntry* dbg = resultArray[0]; + RArray idsToRemove; + CleanupClosePushL(idsToRemove); + idsToRemove.AppendL( resultArray[0]->GetId() ); + aStorage->RemoveL(idsToRemove); + CleanupStack::PopAndDestroy( &idsToRemove ); + } + + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::PopAndDestroy( satAppQuery ); + } + + + + +TUint CTestUtils::FindAppUidL( const TDesC& aName, CCaStorageProxy* aStorage ) + { + CCaInnerQuery* satAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new (ELeave) CDesC16ArrayFlat( 1 ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeApp ); + satAppQuery->SetEntryTypeNames( appType ); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + aStorage->GetEntriesL( satAppQuery, resultArray ); + + TUint appUid(0); + for ( TInt i = 0; i < resultArray.Count(); i++ ) + { + if ( resultArray[i]->GetText() == aName ) + { + appUid = resultArray[i]->GetUid(); + } + } + CleanupStack::PopAndDestroy( &resultArray ); + CleanupStack::Pop( appType ); + CleanupStack::PopAndDestroy( satAppQuery ); + + return appUid; + } + +// ----------------------------------------------------------------------------- +// +TInt CTestUtils::SimpleCloseTaskL(TInt aUid) + { + RWsSession session; + TInt error = session.Connect(); + TUid uidApp( TUid::Uid( aUid )) ; + TApaTaskList taskList( session ); + TApaTask task = taskList.FindApp( uidApp ); + + if( task.Exists() ) + { + task.EndTask(); + } + else + { + error = KErrNotFound; + } + + WaitL( 4000000 ); + session.Close(); + WaitL( 1000000 ); + + return error; + } + +// ---------------------------------------------------------------------------- +// +void CTestUtils::InstallFinishedL() + { + iActiveWait->AsyncStop(); + } + +CCaSrvPlugin* CTestUtils::LoadPluginL( TUid aImplUid, TPluginParams* aPluginParams ) + { + RImplInfoPtrArray infoArray; + + // Note that a special cleanup function is required to reset and destroy + // all items in the array, and then close it. + CleanupResetAndDestroyPushL( infoArray ); + CCaSrvPlugin::ListAllImplementationsL( infoArray ); + + // Loop through each info for each implementation + // and create and use each in turn + CCaSrvPlugin* plug; + for( TInt i = 0; i < infoArray.Count(); i++ ) + { + // Slice off first sub-section in the data section + TUid current_plugin = infoArray[i]->ImplementationUid(); + if ( current_plugin == aImplUid ) + { + plug = CCaSrvPlugin::NewL( current_plugin, aPluginParams ); + CleanupStack::PushL( plug ); + TInt32 key = current_plugin.iUid; + //iPluginMap.InsertL( key, plug ); + CleanupStack::Pop( plug ); + break; + } + plug = NULL; + } + CleanupStack::PopAndDestroy( &infoArray ); + return plug; + } + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/t_cawidgetscanner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/t_cawidgetscanner.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,1025 @@ +/* +* 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: +* +*/ +/* + * T_cahswidgetscanner.cpp + * + * Created on: 2009-09-16 + * Author: + */ + +// CLASS HEADER + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "t_cawidgetscanner.h" +#include "cawidgetscannertestutils.h" +#include "waitactive.h" +#include "casrvengutils.h" +#include "castorageproxy.h" +#include "casrvmanager.h" +#include "casrvplugin.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" +#include "testconsts.h" +#include "cadef.h" +#include "castorage_global.h" + +#include "cawidgetscannerparser.h" +#include "cawidgetstoragehandler.h" +#include "cawidgetscannerplugin.h" +#include "cawidgetscannerdef.h" +#include "WidgetScannerUtils.h" + + +#include "t_cainstaller.h" + +const TUid KHsWidgetPluginUid = {0x20026FB1}; +const TInt installedUid = 0x20053785; + +_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); +_LIT( KTestLibrary, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\testwidget" ); +_LIT8( KWidgetUID, "testwidgetprovider.dll" ); +_LIT( KWidgetLibrary2, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\testwidget22" ); +_LIT( KWidgetLibrary3, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\testwidget33" ); + +_LIT( KWidget1PackageName, "c:\\testing\\data\\Installs\\validwidget1.SISX" ); +_LIT( KWidget2PackageName, "c:\\testing\\data\\Installs\\validwidget2.SISX" ); +_LIT( KWidget3PackageName, "c:\\testing\\data\\Installs\\validwidget3.SISX" ); +_LIT( KWidget4PackageName, "c:\\testing\\data\\Installs\\validwidget4.SISX" ); +_LIT( KWidget1ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget1.manifest" ); +_LIT( KWidget2ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget2.manifest" ); +_LIT( KWidget3ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget3.manifest" ); +_LIT( KWidget4ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget4.manifest" ); +_LIT( KWidgetQmFolder, "c:\\resource\\qt\\translations\\" ); +_LIT( KWidgetQmFolderAndFile, "c:\\resource\\qt\\translations\\" ); +_LIT( KWidgetQmFile, "c:\\testing\\data\\t_cawidgetscanner\\widgettranslation_en_GB.qm" ); +_LIT( KWidgetUri1, "testwidget" ); +_LIT( KWidgetUri2, "testwidget22" ); +_LIT( KWidgetUri3, "testwidget33" ); +_LIT( KWidgetUri4, "testwidget44" ); +_LIT( KTranslationFileNameAsInManifest, "widgettranslation" ); + +template +struct RClassDeleter +{ + static inline void cleanup(RClass *ptr) + { + ptr->Close(); + } +}; + +typedef QScopedPointer > RBufGuard; +typedef QScopedPointer > RBuf8Guard; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::WaitL(TInt aMicroSec) + { + CWaitActive* wait = CWaitActive::NewL(); + wait->Wait(aMicroSec); + delete wait; + } + +void T_CaWidgetScanner::initTestCase() + { + const TUid KWidgetHandlerPluginUid = {0x20028707}; + TRAPD(err, + iTestUtils = CTestUtils::NewL(); + iTestUtils->CopyDb(); + + // remove hswidget + iStorage = CCaStorageProxy::NewL(); + iSrvEngUtils = CCaSrvEngUtils::NewL(); + iScr = new Usif::RSoftwareComponentRegistry; + User::LeaveIfError(iScr->Connect()); + + iFs.Connect(); + iImportPath.CreateL( KMaxPath ); + + createImportDirectoryL(); + + iInstaller = T_CaInstaller::NewL(); + TPluginParams params; + params.engUtils = iSrvEngUtils; + params.storageProxy = iStorage; + params.softwareRegistry = iScr; + iPlugin = iTestUtils->LoadPluginL( KWidgetHandlerPluginUid, ¶ms); + + ); + } + +void T_CaWidgetScanner::cleanupTestCase() + { + QTest::qWait(5000); + + iTestUtils->RemoveL(KTestDbDest); + delete iPlugin; + delete iInstaller; + delete iStorage; + iStorage = NULL; + delete iTestUtils; + iTestUtils = NULL; + delete iSrvEngUtils; + iSrvEngUtils = NULL; + iScr->Close(); + delete iScr; + iScr = NULL; + iFs.Close(); + REComSession::FinalClose(); + iImportPath.Close(); + iWidgetScanFolder.Close(); + + iWidgetScanFile1.Close(); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::init() + { + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::cleanup() + { + QTest::qWait(100); + } + + + +void T_CaWidgetScanner::createImportDirectoryL() + { + //create "parsed" directory if it doesn't exist yet; + // create directory on C: drive + iWidgetScanFolder.Close(); + iWidgetScanFile1.Close(); + iWidgetScanFolder.CreateL(KMaxPath); + iWidgetScanFile1.CreateL(KMaxPath); + iWidgetScanFolder.Append( KPrivate ); + iWidgetScanFolder.Append( KHSWidgetScanFolder ); + iWidgetScanFile1.Append(iWidgetScanFolder); + iWidgetScanFile1.Append(KManifestFile1); + } + +// +// TESTS -------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + +void T_CaWidgetScanner::testPluginNewL() +{ +//Check only if plugin was created correctly + QVERIFY( iPlugin != NULL); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// + + +void T_CaWidgetScanner::testAddWidget() + { + bool widgetExistsInStorage(false); + TInt err(KErrNone); + + + TRAP_IGNORE(iInstaller->InstallL(KWidget1PackageName)); + + QTest::qWait(3000); + + TRAP_IGNORE(widgetExistsInStorage = ( iTestUtils->WidgetExistsInStorageL( + KAttrWidgetLibrary, KTestLibrary, iStorage ) != EFalse )); + + // clean after test + TRAP_IGNORE(iInstaller->UninstallL(KWidget1ManifestName)) + QTest::qWait(3000); + + QVERIFY(widgetExistsInStorage); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testUpdateWidget() + { + TInt err(KErrNone); + + TRAP(err, + testUpdateWidgetTrapped() + ); + } +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testUpdateWidgetTrapped() + { + TInt err(KErrNone); + + TInt expectedCount(0); + TInt actualCount(0); + bool widgetAExistsInStorage(false); + bool widgetBExistsInStorage(false); + + iInstaller->InstallL(KWidget2PackageName); + + QTest::qWait(3000); + + expectedCount = iTestUtils->WidgetsCountL(iStorage); + + widgetAExistsInStorage = (iTestUtils->WidgetExistsInStorageL( + KAttrWidgetLibrary, KWidgetLibrary2, iStorage) != FALSE); + + + iInstaller->InstallL(KWidget3PackageName); + QTest::qWait(3000); + + widgetBExistsInStorage = (iTestUtils->WidgetExistsInStorageL( + KAttrWidgetUri, KWidgetUri2, iStorage) != FALSE); + + actualCount = iTestUtils->WidgetsCountL(iStorage); + TRAP_IGNORE(iInstaller->UninstallL(KWidget2ManifestName)) + QTest::qWait(3000); + TRAP_IGNORE(iInstaller->UninstallL(KWidget3ManifestName)) + QTest::qWait(3000); + + QCOMPARE(err, KErrNone); + QVERIFY(widgetAExistsInStorage); + QVERIFY(widgetBExistsInStorage); + QCOMPARE(actualCount, expectedCount); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testRemoveMmcWidget() + { + TInt err(KErrNone); + TInt id(KErrNotFound); + bool widgetExistsInStorage(false); + bool mmcIdAttributeSet1(false); + bool mmcIdAttributeSet2(false); + + TRAP(err, + + //test + iInstaller->InstallL(KWidget1PackageName); + QTest::qWait(3000); + + id = AppendMmcIdL(_L("TestWidget")); + + mmcIdAttributeSet1 = MmcAttributeSetL(id); + + // after unistall mmc id should be removed + iInstaller->UninstallL(KWidget1ManifestName); + + QTest::qWait(3000); + + mmcIdAttributeSet2 = MmcAttributeSetL(id); + + ); + + QCOMPARE(err, KErrNone); + QVERIFY(mmcIdAttributeSet1); + QVERIFY(!mmcIdAttributeSet2); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testUpdateTheSameWidget() + { + TInt err(KErrNone); + TRAP(err, + testUpdateTheSameWidgetTrapped() + ); + + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testUpdateTheSameWidgetTrapped() + { + _LIT( KWText, "TestWidget" ); + TUint flags0(0U); + TUint flags1(0U); + TUint flags2(0U); + TInt err(KErrNone); + TInt expectedCount(0); + TInt actualCount(0); + + iInstaller->InstallL( KWidget1PackageName ); + + QTest::qWait(3000); + + flags0 = iTestUtils->GetWidgetFlagsL( KWText, iStorage ); + + expectedCount = iTestUtils->WidgetsCountL( iStorage ); + + CCaWidgetDescription* widget = iTestUtils->GetWidgetEntryL( KWText, iStorage ); + + if (widget == NULL) + { + User::Leave(KErrNotFound); + } + + CleanupStack::PushL( widget ); + CCaInnerEntry* innerEntry = widget->GetEntryLC(); + iStorage->TouchL( innerEntry ); + QTest::qWait( 500 ); + + flags1 = iTestUtils->GetWidgetFlagsL( KWText, iStorage ); + + iInstaller->InstallL( KWidget1PackageName ); + QTest::qWait(3000); + + flags2 = iTestUtils->GetWidgetFlagsL( KWText, iStorage ); + + actualCount = iTestUtils->WidgetsCountL(iStorage); + + CleanupStack::PopAndDestroy( innerEntry ); + CleanupStack::PopAndDestroy( widget ); + + + // clean after test + iInstaller->UninstallL(KWidget1ManifestName); + QTest::qWait(3000); +// QCOMPARE(err, KErrNone); + QVERIFY( ~(flags0 & EUsed) ); + QVERIFY( (flags1 & EUsed) ); + QVERIFY( ~(flags2 & EUsed) ); + QCOMPARE(actualCount, expectedCount); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testUpdateMmcRemoveInsertTrapped() + { + _LIT( KWTextCanNotTranslate, "txt_applib_subtitle_downloads" ); + TPluginParams params; + params.engUtils = 0; + params.storageProxy = iStorage; + params.softwareRegistry = iScr; + _LIT( KWTextTranslated, "Downloads" ); + TUint flags0(0U); + TUint flags1(0U); + TUint flags2(0U); + TUint flags3(0U); + TInt err(KErrNone); + + + + iTestUtils->Copy( KWidgetQmFile, KWidgetQmFolder ); + + CCaWidgetStorageHandler* handler = CCaWidgetStorageHandler::NewL( + iStorage, *iScr, iFs ); + + iInstaller->InstallL( KWidget2PackageName ); + QTest::qWait(3000); + //get translated widget + RBuf widgetName; + widgetName.CreateL( KWTextTranslated ); + CCaWidgetDescription* widget = iTestUtils->GetWidgetEntryL( + KWTextTranslated, iStorage ); + if( !widget ) + { + widgetName.Close(); + widgetName.CreateL( KWTextCanNotTranslate ); + //qm file has not found + widget = iTestUtils->GetWidgetEntryL( + KWTextCanNotTranslate, iStorage ); + } + flags0 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage ); + CleanupStack::PushL( widget ); + CCaInnerEntry* innerEntry = widget->GetEntryLC(); + iStorage->TouchL( innerEntry ); + QTest::qWait( 500 ); + + flags1 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage ); + + CCaWidgetDescription* widget2 = iTestUtils->GetWidgetEntryL( widgetName, iStorage ); + CleanupStack::PushL( widget2 ); + + // set missing + handler->SetMissingFlagL( widget2 ); + flags2 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage ); + + iInstaller->InstallL( KWidget2PackageName ); + QTest::qWait( 4000 ); + + flags3 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage ); + widgetName.Close(); + CleanupStack::PopAndDestroy( widget2 ); + CleanupStack::PopAndDestroy( innerEntry ); + CleanupStack::PopAndDestroy( widget ); + iTestUtils->RemoveL( KWidgetQmFolderAndFile ); + + + // clean after test + iInstaller->UninstallL(KWidget2ManifestName); + + QTest::qWait(3000); + QCOMPARE(err, KErrNone); + QVERIFY( ~(flags0 & EUsed) ); + QVERIFY( flags1 & EUsed ); + QVERIFY( ~(flags1 & EMissing) ); + QVERIFY( flags2 & EUsed ); + QVERIFY( flags2 & EMissing ); + QVERIFY( flags3 & ~EUsed ); + QVERIFY( flags3 & ~EMissing ); + } + +void T_CaWidgetScanner::testUpdateMmcRemoveInsert() + { + TInt err(KErrNone); + TRAP(err, + testUpdateMmcRemoveInsertTrapped() + ); + } +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testRemoveWidget() + { + TInt err(KErrNone); + bool widgetExistedInStorage(false); + bool widgetRemovedFromStorage(false); + + + TRAP(err, + + iInstaller->InstallL(KWidget1PackageName); + + QTest::qWait(3000); + + widgetExistedInStorage =( iTestUtils->WidgetExistsInStorageL( + KAttrWidgetLibrary, KTestLibrary, iStorage ) != FALSE); + + iInstaller->UninstallL(KWidget1ManifestName); + + QTest::qWait(3000); + + widgetRemovedFromStorage = ((iTestUtils->WidgetExistsInStorageL( + KAttrWidgetLibrary, KTestLibrary, iStorage )) != FALSE); + + + ); + + QCOMPARE(err, KErrNone); + QVERIFY(widgetExistedInStorage); + QVERIFY(widgetRemovedFromStorage); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testSetMissingFlag() + { + _LIT( KWText, "TestWidget" ); + + TInt err(KErrNone); + TUint flags(0U); + + TRAP(err, + + CCaWidgetStorageHandler* handler = CCaWidgetStorageHandler::NewL( + iStorage, *iScr, iFs); + iInstaller->InstallL(KWidget1PackageName); + QTest::qWait(3000); + + CCaWidgetDescription* widget = iTestUtils->GetWidgetEntryL( KWText, iStorage); + handler->SetMissingFlagL( widget ); + delete widget; + + flags = iTestUtils->GetWidgetFlagsL(KWText, iStorage); + + delete handler; + ); + + // clean after test + TRAP_IGNORE(iInstaller->UninstallL(KWidget1ManifestName)); + QTest::qWait(3000); + QCOMPARE(err, KErrNone); + QVERIFY( flags & EMissing ); + QVERIFY( ~(flags & EVisible) ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testSetLocalizationsL() + { + CCaWidgetDescription* widget = CCaWidgetDescription::NewLC(); + widget->SetUriL(KWidgetUri1()); + widget->SetTranslationFileNameL(KTranslationFileNameAsInManifest()); + widget->SetTitleL( _L("txt_applib_subtitle_downloads") ); + + widget->LocalizeTextsL(); + + QVERIFY(!widget->GetStringIdTitle().Compare(_L("txt_applib_subtitle_downloads"))); + QVERIFY(!widget->GetStringIdDescription().Compare( KNullDesC )); + + RPointerArray resultContainer; + CleanupResetAndDestroyPushL( resultContainer ); + iStorage->GetLocalizationsL( resultContainer ); + int a = resultContainer.Count(); + resultContainer.Reset(); + + CCaWidgetStorageHandler* handler = CCaWidgetStorageHandler::NewL( + iStorage, *iScr, iFs ); + + widget->SetStringidTitleL( _L("titleId") ); + handler->SetLocalizationsL( widget, 2000 ); + + iStorage->GetLocalizationsL( resultContainer ); + int b = resultContainer.Count(); + + QCOMPARE( a+1, b ); + + delete handler; + CleanupStack::PopAndDestroy( &resultContainer ); + CleanupStack::PopAndDestroy( widget ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testUtils() + { + RBuf mmcId; + mmcId.CleanupClosePushL(); + mmcId.CreateL(KMassStorageIdLength); + WidgetScannerUtils::CurrentMmcId(iFs, mmcId); + TInt mmcDrive; + if( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, + mmcDrive ) == KErrNone ) + { + QVERIFY(mmcId.Length() > 0); + } + + CleanupStack::PopAndDestroy( &mmcId ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testParsePreviewImageName() +{ + TInt err(KErrNone); + TChar drive = 'c'; + + RBuf expectedPreviewFileName; + RBufGuard expectedPreviewFileNameGuard(&expectedPreviewFileName); + + QScopedPointer < CCaWidgetScannerParser > parser; + QScopedPointer < CCaWidgetDescription > widgetDescriptor; + QT_TRAP_THROWING(parser.reset(CCaWidgetScannerParser::NewL(iFs))); + QT_TRAP_THROWING(widgetDescriptor.reset( CCaWidgetDescription::NewL()) ); + + _LIT8( KPreviewFileName8, "preview.png" ); + _LIT( KPreviewFileName, "preview.png" ); + _LIT( KWidgetPackageId, "12345678" ); + + TXmlEngElement element; + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + TXmlEngElement element = + doc.CreateDocumentElementL(KPreviewImageElementName()); + element.AddTextL(KPreviewFileName8()); + parser->ParsePreviewImageNameL( element, KWidgetPackageId(), + widgetDescriptor.data(), drive); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + + QCOMPARE(err, KErrNone); + + TRAP(err, + HBufC *manifestPath = parser->GetManifestDirectoryPathLC( + KWidgetPackageId(), drive ); + expectedPreviewFileName.CreateL(manifestPath->Length() + + KPreviewFileName().Length()); + expectedPreviewFileName.Append(*manifestPath); + expectedPreviewFileName.Append(KPreviewFileName()); + CleanupStack::PopAndDestroy( manifestPath ); + ); + QCOMPARE(err, KErrNone); + { + const QString exp = XQConversions::s60DescToQString(expectedPreviewFileName); + const QString act = + XQConversions::s60DescToQString( + widgetDescriptor->GetPreviewImageName()); + QCOMPARE(exp, act); + } + + RBuf expectedPreviewSkinId; + RBufGuard expectedPreviewSkinIdGuard(&expectedPreviewSkinId); + + _LIT8( KPreviewSkinId, "skin_id" ); + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + + TXmlEngElement element = + doc.CreateDocumentElementL(KPreviewImageElementName()); + element.AddTextL(KPreviewSkinId()); + parser->ParsePreviewImageNameL( element, KWidgetPackageId(), + widgetDescriptor.data(), drive); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + QCOMPARE(err, KErrNone); + + TRAP(err, + expectedPreviewSkinId.Assign( + CnvUtfConverter::ConvertToUnicodeFromUtf8L(KPreviewSkinId())); + ); + QCOMPARE(err, KErrNone); + { + const QString exp = XQConversions::s60DescToQString(expectedPreviewSkinId); + const QString act = + XQConversions::s60DescToQString( + widgetDescriptor->GetPreviewImageName()); + + QCOMPARE(exp, act); + } + + RBuf8 attributeValueTooLong; + RBuf8Guard attributeValueTooLongGuard(&attributeValueTooLong); + attributeValueTooLong.CreateL(KCaMaxAttrValueLen + 1); + + for (int i = KCaMaxAttrValueLen; i >= 0 ; --i) + { + attributeValueTooLong.Append(_L8("a")); + } + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + + TXmlEngElement element = + doc.CreateDocumentElementL(KPreviewImageElementName()); + element.AddTextL(attributeValueTooLong); + + parser->ParsePreviewImageNameL( element, KWidgetPackageId(), + widgetDescriptor.data(), drive); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + QCOMPARE(err, KErrNone); + { + QCOMPARE(widgetDescriptor->GetPreviewImageName().Length(), + KCaMaxAttrValueLen + 1); + } + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + + TXmlEngElement element = + doc.CreateDocumentElementL(KPreviewImageElementName()); + element.AddTextL(KNullDesC8); + + parser->ParsePreviewImageNameL( element, KWidgetPackageId(), + widgetDescriptor.data(), drive); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + QCOMPARE(err, KErrNone); + { + const QString exp = XQConversions::s60DescToQString(KNullDesC);; + const QString act = XQConversions::s60DescToQString( + widgetDescriptor->GetPreviewImageName()); + QCOMPARE(exp, act); + } +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaWidgetScanner::testParseIconName() +{ + TInt err(KErrNone); + + TChar drive = 'c'; + + RBuf expectedIconFileName; + RBufGuard expectedIconFileNameGuard(&expectedIconFileName); + + QScopedPointer < CCaWidgetScannerParser > parser; + QScopedPointer < CCaWidgetDescription > widgetDescriptor; + QT_TRAP_THROWING(parser.reset(CCaWidgetScannerParser::NewL(iFs))); + QT_TRAP_THROWING(widgetDescriptor.reset( CCaWidgetDescription::NewL()) ); + + _LIT8( KIconName8, "preview.png" ); + _LIT( KIconName, "preview.png" ); + _LIT( KWidgetPackageId, "12345678" ); + TXmlEngElement element; + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + TXmlEngElement element = + doc.CreateDocumentElementL(KIcon()); + element.AddTextL(KIconName8()); + parser->ParseIconL( element, KWidgetPackageId(), widgetDescriptor.data(), drive ); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + + QCOMPARE(err, KErrNone); + + TRAP(err, + HBufC *manifestPath = parser->GetManifestDirectoryPathLC( KWidgetPackageId(), drive ); + expectedIconFileName.CreateL(manifestPath->Length() + KIconName().Length()); + expectedIconFileName.Append(*manifestPath); + expectedIconFileName.Append(KIconName()); + CleanupStack::PopAndDestroy(manifestPath); + ); + QCOMPARE(err, KErrNone); + { + const QString exp = XQConversions::s60DescToQString(expectedIconFileName); + const QString act = + XQConversions::s60DescToQString( + widgetDescriptor->GetIconUri()); + QCOMPARE(exp, act); + } + + RBuf expectedIconSkinId; + RBufGuard expectedIconSkinIdGuard(&expectedIconSkinId); + + _LIT8( KIconSkinId, "skin_id" ); + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + + TXmlEngElement element = + doc.CreateDocumentElementL(KIcon()); + element.AddTextL(KIconSkinId()); + + parser->ParseIconL(element, KWidgetPackageId(), widgetDescriptor.data(), drive); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + QCOMPARE(err, KErrNone); + + TRAP(err, + expectedIconSkinId.Assign( + CnvUtfConverter::ConvertToUnicodeFromUtf8L(KIconSkinId())); + ); + QCOMPARE(err, KErrNone); + { + const QString exp = XQConversions::s60DescToQString(expectedIconSkinId); + const QString act = + XQConversions::s60DescToQString( + widgetDescriptor->GetIconUri()); + + QCOMPARE(exp, act); + } + + RBuf8 veryLongAttributeValue; + RBuf8Guard veryLongAttributeValueGuard(&veryLongAttributeValue); + veryLongAttributeValue.CreateL(KCaMaxAttrValueLen + 1); + + for (int i = KCaMaxAttrValueLen; i >= 0 ; --i) + { + veryLongAttributeValue.Append(_L8("a")); + } + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + + TXmlEngElement element = + doc.CreateDocumentElementL(KIcon()); + element.AddTextL(veryLongAttributeValue); + + parser->ParseIconL(element, KWidgetPackageId(), widgetDescriptor.data(), drive ); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + QCOMPARE(err, KErrNone); + + { + QCOMPARE(widgetDescriptor->GetIconUri().Length(), + KCaMaxAttrValueLen + 1); + } + + TRAP(err, + RXmlEngDOMImplementation domImpl; + CleanupClosePushL(domImpl); + domImpl.OpenL(); + RXmlEngDocument doc; + CleanupClosePushL(doc); + doc.OpenL(domImpl); + + TXmlEngElement element = + doc.CreateDocumentElementL(KIcon()); + element.AddTextL(KNullDesC8); + + parser->ParseIconL(element, KWidgetPackageId(), widgetDescriptor.data(), drive ); + CleanupStack::PopAndDestroy(&doc); + CleanupStack::PopAndDestroy(&domImpl); + ); + + QCOMPARE(err, KErrNone); + { + const QString exp = XQConversions::s60DescToQString(KNullDesC);; + const QString act = XQConversions::s60DescToQString( + widgetDescriptor->GetIconUri()); + QCOMPARE(exp, act); + } +} + +void T_CaWidgetScanner::testCloneWidgetDescriptionL() +{ + QScopedPointer descriptionA; + QT_TRAP_THROWING(descriptionA.reset(CCaWidgetDescription::NewL())); + QScopedPointer descriptionB( + descriptionA->CloneL()); + + QVERIFY(descriptionA->Compare(*descriptionB) + != static_cast(EFalse)); + + _LIT( KTestDescription, "GetDescription()" ); + + QT_TRAP_THROWING( + descriptionA->SetDescriptionL( KTestDescription ) + ) + + QVERIFY(descriptionA->Compare(*descriptionB) + == static_cast(EFalse)); + + QScopedPointer descriptionC( + descriptionA->CloneL()); + + QVERIFY(descriptionA->Compare(*descriptionC) + != static_cast(EFalse)); + + QVERIFY(descriptionA->GetDescription().Compare( KTestDescription ) == 0); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt T_CaWidgetScanner::AppendMmcIdL(const TDesC& aText) + { + //get mmc id + RBuf mmcId; + mmcId.CleanupClosePushL(); + mmcId.CreateL(_L("mass_storage")); + + //append mmc id to the entry + CCaInnerQuery* query = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* widgetType = new ( ELeave ) CDesC16ArrayFlat( + KGranularityOne ); + CleanupStack::PushL( widgetType ); + widgetType->AppendL( KCaTypeWidget ); + query->SetEntryTypeNames( widgetType );//transfers ownership to query + CleanupStack::Pop( widgetType ); + + RPointerArray entries; + CleanupResetAndDestroyPushL( entries ); + iStorage->GetEntriesL( query, entries ); + TInt id(0); + for( TInt i = 0; i < entries.Count(); i++ ) + { + if(entries[i]->GetText().Compare(aText)==0) + { + entries[i]->AddAttributeL(KCaAttrMmcId, mmcId); + id = entries[i]->GetId(); + iStorage->AddL(entries[i]); + break; + } + } + CleanupStack::PopAndDestroy( &entries ); + CleanupStack::PopAndDestroy( query ); + CleanupStack::PopAndDestroy( &mmcId ); + return id; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool T_CaWidgetScanner::MmcAttributeSetL(TInt aId) + { + TBool result(EFalse); + CCaInnerQuery* query = CCaInnerQuery::NewLC(); + RArray ids; + CleanupClosePushL(ids); + ids.AppendL(aId); + query->SetIdsL(ids); + CleanupStack::PopAndDestroy(&ids); + RPointerArray entries; + CleanupResetAndDestroyPushL( entries ); + iStorage->GetEntriesL( query, entries ); + if (entries.Count() == 1) + { + TPtrC temp(KNullDesC); + result = entries[0]->FindAttribute(KCaAttrMmcId, temp); + } + CleanupStack::PopAndDestroy( &entries ); + CleanupStack::PopAndDestroy( query ); + + return result; + } + + + + + +QTEST_MAIN(T_CaWidgetScanner); diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/waitactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/waitactive.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,83 @@ +/* +* 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: CWaitActive implementation +* +*/ + +#include "waitactive.h" + +#include "waitactive.h" + +// ======== MEMBER FUNCTIONS ======== + + +void CWaitActive::ConstructL() + { + CTimer::ConstructL(); + iActiveScheduler = new ( ELeave ) CActiveSchedulerWait(); + } + + +CWaitActive* CWaitActive::NewL() + { + CWaitActive* self = new( ELeave ) CWaitActive; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() +// Default constructor. +// ---------------------------------------------------------------------------- +// +CWaitActive::CWaitActive() + :CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +CWaitActive::~CWaitActive() + { + Cancel(); + delete iActiveScheduler; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +void CWaitActive::Wait(TTimeIntervalMicroSeconds32 anInterval) + { + After(anInterval); + iActiveScheduler->Start(); + + } + + + +// ---------------------------------------------------------------------------- +// void CIsvTelCallAppTelephony::RunL() +// Handles the active object’s request completion event. +// ---------------------------------------------------------------------------- +// +void CWaitActive::CWaitActive::RunL() + { + // CActiveScheduler::Stop(); + iActiveScheduler->AsyncStop(); + + } diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/t_cawidgetscanner.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/t_cawidgetscanner.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + ../../../../tsrc/testutils/inc + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp \ + ../../../../srvsrc/cainstallnotifier.cpp \ + ../../../../srvsrc/cainstallstrategy.cpp \ + ../../../../srvsrc/casrvengutils.cpp \ + ../../../../srvsrc/castorageproxy.cpp \ + ../../../../srvsrc/casrvnotifier.cpp \ + ../../../../srvsrc/casrv.cpp \ + ../../../../srvsrc/casrvmmchistory.cpp \ + ../../../../srvsrc/cabackupnotifier.cpp \ + ../../../../srvsrc/casrvsession.cpp \ + ../../../casrvmgr/src/casrvmanager.cpp \ + ../../../../cautils/src/*.cpp \ + ../../../../castorage/src/*.cpp \ + ../../../../tsrc/testutils/src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/t_cawidgetscanner.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/t_cawidgetscanner.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,129 @@ +# 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: + + +TEMPLATE = app + +include(../../../../../common.pri) +include(../../../../tsrc/testutils/testutils.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../../../srvinc \ + ../../../../extinc \ + ../../../../cautils/inc \ + ../../../casrvmgr/inc \ + ../../../../castorage/inc \ + ../../../../srvinc \ + /epoc32/include/mw/hb/hbcore \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_cawidgetscanner.pri) + +symbian: { + + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20028705 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lestor \ + -lapparc \ + -lapgrfx \ + -lcautils \ + -lsysutil \ + -lplatformenv \ + -lcasrvmanager \ + -lws32 \ + -lecom \ + -lxmlengineDOM \ + -lcharconv \ + -lplatformenv \ + -lsisregistryclient \ + -lsqldb \ + -lbafl \ + -lefsrv \ + -lflogger \ + -lcamenu \ + -lscrclient \ + -lsifnotification \ + -lsif \ + -lhbcore \ + -lxmlengineDOM \ + -lxqutils + + exportDB.sources = ./data/castorage.db ./data/widgettranslation_en_GB.qm + exportDB.path = c:/testing/data/t_cawidgetscanner/ + + exportManifest.sources = ./data/validwidget1.manifest ./data/validwidget2.manifest ./data/validwidget3.manifest ./data/validwidget4.manifest + exportManifest.path = c:/testing/data/t_cawidgetscanner + + exportSis.path = c:/testing/data/installs + exportSis.sources = ./data/validwidget1.SISX ./data/validwidget2.SISX ./data/validwidget3.SISX ./data/validwidget4.SISX + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} $${exportDB.path}" + + for(exportManifest, exportManifest.sources):{ + BLD_INF_RULES.prj_testexports += \ + "./$$exportManifest $$exportManifest.path/$$basename(exportManifest)" + } + + for(exportSis, exportSis.sources): { + BLD_INF_RULES.prj_testexports += \ + "./$$exportSis $$exportSis.path/$$basename(exportSis)" + } + + DEPLOYMENT += exportDB exportManifest exportSis +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_cawidgetscanner.exe -o c:\t_cawidgetscanner.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/casrv/cawidgetscanner/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/casrv/cawidgetscanner/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +SUBDIRS = t_cawidgetscanner + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castorage.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/data/castorage.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_castorage.exe -o c:\t_castorage.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castorage.db Binary file contentstorage/castorage/tsrc/t_castorage/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castoragedb_create.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/data/castoragedb_create.sql Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,225 @@ +DROP TABLE IF EXISTS CA_ENTRY; +DROP TABLE IF EXISTS CA_GROUP_ENTRY; +DROP TABLE IF EXISTS CA_ICON; +DROP TABLE IF EXISTS CA_LAUNCH; +DROP TABLE IF EXISTS CA_ATTRIBUTE; +DROP TABLE IF EXISTS CA_LOCALIZATION_TEXT; +DROP TABLE IF EXISTS CA_DB_PROPERTIES; + +SELECT "CREATE TABLE CA_ENTRY" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_ENTRY( ENTRY_ID INTEGER PRIMARY KEY, + EN_TEXT TEXT NOT NULL COLLATE NOCASE, + EN_DESCRIPTION TEXT COLLATE NOCASE, + EN_ROLE INTEGER default 1, + EN_TYPE_NAME TEXT NOT NULL, + EN_ICON_ID INTEGER, + EN_CREATION_TIME BIGINT default -1 NOT NULL, + EN_UID INTEGER UNIQUE, + EN_FLAGS INTEGER default 8, + FOREIGN KEY(EN_ICON_ID) REFERENCES CA_ICON(ICON_ID) ); +CREATE INDEX EntryText_CAIndex ON CA_ENTRY(EN_TEXT); +CREATE INDEX EntryCreationTime_CAIndex ON CA_ENTRY(EN_CREATION_TIME); + +SELECT "CREATE TABLE CA_GROUP_ENTRY" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_GROUP_ENTRY( GROUP_ENTRY_ID INTEGER PRIMARY KEY , + GE_GROUP_ID INTEGER NOT NULL, + GE_ENTRY_ID INTEGER NOT NULL, + GE_POSITION INTEGER, + UNIQUE( GE_GROUP_ID, GE_ENTRY_ID ), + FOREIGN KEY(GE_GROUP_ID) REFERENCES CA_ENTRY(ENTRY_ID), + FOREIGN KEY(GE_ENTRY_ID) REFERENCES CA_ENTRY(ENTRY_ID) ); +CREATE INDEX GroupGE_POSITION_CAIndex ON CA_GROUP_ENTRY(GE_POSITION); +CREATE TRIGGER update_position_in_ca_group_entry_after_remove AFTER DELETE ON CA_GROUP_ENTRY +BEGIN + UPDATE CA_GROUP_ENTRY SET GE_POSITION = GE_POSITION - 1 WHERE GE_POSITION > old.GE_POSITION AND GE_GROUP_ID = old.GE_GROUP_ID; +END; +CREATE TRIGGER update_position_in_ca_group_entry_before_insert BEFORE INSERT ON CA_GROUP_ENTRY +BEGIN + UPDATE CA_GROUP_ENTRY SET GE_POSITION = GE_POSITION + 1 WHERE GE_POSITION >= new.GE_POSITION AND GE_GROUP_ID = new.GE_GROUP_ID; +END; + +SELECT "CREATE TABLE CA_ICON" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_ICON( ICON_ID INTEGER PRIMARY KEY , + IC_FILENAME TEXT, + IC_SKIN_ID TEXT, + IC_APP_ID TEXT, + UNIQUE( IC_FILENAME, IC_SKIN_ID, IC_APP_ID ) ); + +SELECT "CREATE TABLE CA_LAUNCH" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_LAUNCH( LAUNCH_ID INTEGER PRIMARY KEY , + LA_ENTRY_ID INTEGER NOT NULL, + LA_LAUNCH_TIME INTEGER NOT NULL, + FOREIGN KEY(LA_ENTRY_ID) REFERENCES CA_ENTRY(ENTRY_ID) ); +CREATE INDEX LaunchLaunchTime_CAIndex ON CA_LAUNCH(LA_LAUNCH_TIME); + +SELECT "CREATE TABLE CA_ATTRIBUTE" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_ATTRIBUTE( ATTRIBUTE_ID INTEGER PRIMARY KEY , + AT_ENTRY_ID INTEGER NOT NULL, + AT_NAME TEXT NOT NULL, + AT_VALUE TEXT NOT NULL, + UNIQUE( AT_ENTRY_ID, AT_NAME ), + FOREIGN KEY(AT_ENTRY_ID) REFERENCES CA_ENTRY(ENTRY_ID) ); + +SELECT "CREATE TABLE CA_LOCALIZATION_TEXT" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_LOCALIZATION_TEXT( LOC_TEXT_ID INTEGER PRIMARY KEY , + LT_TABLE_NAME TEXT , + LT_ATTRIBUTE_NAME TEXT , + LT_STRING_ID TEXT , + LT_QMFILENAME TEXT, + LT_ROW_ID INTEGER ); + +SELECT "CREATE TABLE CA_DB_PROPERTIES" AS " "; +SELECT "------------------------------------" AS " "; +CREATE TABLE CA_DB_PROPERTIES( DB_PROPERTIES_ID INTEGER PRIMARY KEY , + DB_PROPERTY TEXT UNIQUE, + DB_VALUE TEXT ); + + + +-- CREATE VIEW COLLECTION +SELECT "------------------------------------" AS " "; +SELECT "CREATE VIEW COLLECTION" AS " "; +DROP VIEW IF EXISTS COLLECTION; +CREATE VIEW COLLECTION + AS SELECT + "" AS "COLLECTION_NAME", + "" AS "COL_LOCNAME", + "" AS "ICON"; + +SELECT " CREATE TRIGGER collection_insert" AS " "; +CREATE TRIGGER collection_insert INSTEAD OF INSERT ON COLLECTION +BEGIN + -- INSERT ICON + INSERT INTO CA_ICON (IC_FILENAME) + VALUES ( new.ICON); + -- DELETE IF ICON IS NULL OR IF IT IS DUPLICATE + DELETE FROM CA_ICON WHERE ICON_ID = last_insert_rowid() AND + (IC_FILENAME IS NULL OR (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON AND ICON_ID <> last_insert_rowid()) IS NOT NULL); + -- INSERT ENTRY + INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_FLAGS, EN_ICON_ID ) + VALUES ( new.COLLECTION_NAME , 2, "collection", 12, (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON )); + -- LOCALIZATION + INSERT INTO CA_LOCALIZATION_TEXT ( LT_TABLE_NAME, LT_ATTRIBUTE_NAME, LT_STRING_ID, LT_ROW_ID ) + VALUES ( 'CA_ENTRY', 'EN_TEXT', new.COL_LOCNAME, ( SELECT last_insert_rowid() ) ); + DELETE FROM CA_LOCALIZATION_TEXT WHERE LT_STRING_ID IS NULL AND LOC_TEXT_ID = last_insert_rowid() ; + -- RELATION TO MAIN COLLECTION (ADD TO GROUP: ) + INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) + VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TYPE_NAME = "menucollections") , + (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME), + (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TYPE_NAME = "menucollections")) ); + -- ADD ATTRIBUTE + INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) + VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME AND (EN_TYPE_NAME = "collection::downloaded" OR EN_TYPE_NAME = "collection") ), "appgroup_name", new.COLLECTION_NAME ); +END; + +-- CREATE VIEW ITEM_TO_COLLECTION +SELECT "------------------------------------" AS " "; +SELECT "CREATE VIEW ITEM_TO_COLLECTION" AS " "; +DROP VIEW IF EXISTS ITEM_TO_COLLECTION; +CREATE VIEW ITEM_TO_COLLECTION + AS SELECT + "" AS "ITEM_TYPE", + "" AS "ITEM_NAME", + "" AS "ICON", + "" AS "ITEM_DEST", + "" AS "COLLECTION_NAME"; + +SELECT " CREATE TRIGGER item_to_collection_insert_app" AS " "; +CREATE TRIGGER item_to_collection_insert_app INSTEAD OF INSERT ON ITEM_TO_COLLECTION WHEN new.ITEM_TYPE="application" +BEGIN + -- INSERT ENTRY + INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_UID ) + VALUES ( new.ITEM_NAME, 1, "application", new.ITEM_DEST ); + -- RELATION TO MAIN COLLECTION (ADD TO GROUP: ) + INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) + VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME) , + (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME), + (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME)) ); +END; + +SELECT " CREATE TRIGGER item_to_collection_insert_url" AS " "; +CREATE TRIGGER item_to_collection_insert_url INSTEAD OF INSERT ON ITEM_TO_COLLECTION WHEN new.ITEM_TYPE="url" +BEGIN + -- INSERT ICON + INSERT OR IGNORE INTO CA_ICON (IC_FILENAME) + VALUES ( new.ICON); + DELETE FROM CA_ICON WHERE ICON_ID = last_insert_rowid() AND + (IC_FILENAME IS NULL OR (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON AND ICON_ID <> last_insert_rowid()) IS NOT NULL); + -- INSERT ENTRY + INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID ) + VALUES ( new.ITEM_NAME, 1, "url", (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON )); + INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) + VALUES ( ( SELECT last_insert_rowid() ) ,"url",new.ITEM_DEST); + -- RELATION TO MAIN COLLECTION (ADD TO GROUP: ) + INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) + VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME) , + (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME), + (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME)) ); +END; + + +-- CREATE VIEW WIDGET _TO_COLLECTION +SELECT "------------------------------------" AS " "; +SELECT "CREATE VIEW WIDGET_TO_COLLECTION" AS " "; +DROP VIEW IF EXISTS WIDGET_TO_COLLECTION; +CREATE VIEW WIDGET_TO_COLLECTION + AS SELECT + "" AS "ITEM_TYPE", + "" AS "ITEM_NAME", + "" AS "ICON", + "" AS "PACKAGE_UID", + "" AS "LIBRARY", + "" AS "URI", + "" AS "COLLECTION_NAME" ; + +SELECT " CREATE TRIGGER insert_widget_to_collection" AS " "; +CREATE TRIGGER item_to_collection_insert_widget INSTEAD OF INSERT ON WIDGET_TO_COLLECTION WHEN new.ITEM_TYPE="widget" +BEGIN + -- INSERT ICON + INSERT OR IGNORE INTO CA_ICON (IC_FILENAME) + VALUES ( new.ICON); + DELETE FROM CA_ICON WHERE ICON_ID = last_insert_rowid() AND + (IC_FILENAME IS NULL OR (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON AND ICON_ID <> last_insert_rowid()) IS NOT NULL); + -- INSERT ENTRY + INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID ) + VALUES ( new.ITEM_NAME, 1, "widget", (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON )); + -- INSERT ATTRIBUTES + INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) + VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"packageuid",new.PACKAGE_UID); + INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) + VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"widget:library",new.LIBRARY); + INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) + VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"widget:uri",new.URI); + -- RELATION TO MAIN COLLECTION (ADD TO GROUP: ) + INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) + VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME) , + (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME), + (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME)) ); +END; + + + + +SELECT "INSERT INITIAL DATA TO CA_DB_PROPERTIES" AS " "; + +SELECT "------------------------------------" AS " "; +INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) +VALUES ( 'Version', '00001' ); +INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) +VALUES ( 'Language', 'en_GB' ); +INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) +VALUES ( 'QMfile', 'db_textmap_' ); + + + + +SELECT "------------------------------------" AS " "; +SELECT "castorage.db_create - END" AS " "; +SELECT "------------------------------------" AS " "; + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,5 @@ +@echo off +del castorage.db +sqlite3 castorage.db ".read castoragedb_create.sql" +sqlite3 castorage.db ".genfkey --exec" +sqlite3 castorage.db ".read castoragedb_variant.sql" diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant.sql Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,82 @@ +SELECT "------------------------------------" AS " "; +SELECT "castoragedb_variant - BEGIN" AS " "; + +-- insert neccessary items +SELECT "INSERT GROUPS" AS " "; +SELECT "." AS " "; +INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID, EN_UID ) +VALUES ( 'Menu', 2, "folder", NULL , NULL ); + +INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) +VALUES ( last_insert_rowid(), "appgroup_name", "Menu" ); + +SELECT "INSERT menucollections ENTRY" AS " "; +INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID, EN_UID ) +VALUES ( 'AllCollections', 2, "menucollections", NULL , NULL ); + +INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) +VALUES ( last_insert_rowid(), "appgroup_name", "AllCollections" ); + +SELECT "." AS " "; +INSERT INTO CA_ICON (IC_FILENAME) +VALUES ( 'c:\data\Images\kqticaicons\google1.png'); + +INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID, EN_UID, EN_FLAGS ) +VALUES ( 'Application Library', 2, "applicationlibrary", ( SELECT last_insert_rowid() ), NULL, 8 ); + +INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) +VALUES ( last_insert_rowid(), "appgroup_name", " Application Library" ); + +SELECT "------------------------------------" AS " "; +SELECT "INSERT Downloaded collection ENTRY" AS " "; +INSERT INTO CA_ICON (IC_FILENAME) +VALUES ( "qtg_large_applications_download"); + +INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID, EN_FLAGS ) +VALUES ( 'Downloaded', 2, "collection::downloaded", last_insert_rowid() , 8 ); + +INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE ) +VALUES ( last_insert_rowid(), "appgroup_name", " Downloaded" ); + +INSERT INTO CA_LOCALIZATION_TEXT ( LT_TABLE_NAME, LT_ATTRIBUTE_NAME, LT_STRING_ID, LT_ROW_ID ) +VALUES ( 'CA_ENTRY', 'EN_TEXT', "txt_applib_dblist_downloaded", ( SELECT last_insert_rowid() ) ); + +INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) +VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TYPE_NAME = "menucollections") , + (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TYPE_NAME = "collection::downloaded"), + 1 ); + +-- insert additional items + +INSERT INTO COLLECTION (COLLECTION_NAME, COL_LOCNAME, ICON) VALUES ( 'Office', "txt_applib_dblist_office", "qtg_large_applications_user"); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'calendar', 268458241, 'Office' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'Phonebook', 537014009, 'Office' ); + +INSERT INTO COLLECTION (COLLECTION_NAME, ICON) VALUES ( 'Multimedia', "qtg_large_applications_user" ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'Themes', 268458546, 'Multimedia' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'Paint Cursor', 537001564, 'Multimedia' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'Videoplayer', 537006590, 'Multimedia' ); + +INSERT INTO COLLECTION (COLLECTION_NAME, ICON) VALUES ( 'Utils', "qtg_large_applications_user" ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'ControlPanel', 537026521, 'Utils' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'Bluetooth', 268458321, 'Utils' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'SW update', 537001519, 'Utils' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'eshell', 270498535, 'Utils' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ITEM_DEST, COLLECTION_NAME) + VALUES ("application", 'Conn. mgr.', 270501072, 'Utils' ); + + +INSERT INTO COLLECTION (COLLECTION_NAME, COL_LOCNAME, ICON) VALUES ( 'Games', "txt_applib_dblist_games", "qtg_large_applications_user" ); + +SELECT "castoragedb_variant - END" AS " "; +SELECT "------------------------------------" AS " "; + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant_test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant_test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,5 @@ +@echo off +del castorage.db +sqlite3 castorage.db ".read castoragedb_create.sql" +sqlite3 castorage.db ".genfkey --exec" +sqlite3 castorage.db ".read castoragedb_variant_test.sql" diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant_test.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/data/castoragedb_variant_test.sql Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +-- ONLY IF YOU SURE THAT WANT DEFAULT CONTENT +.read castoragedb_variant.sql + +SELECT "castoragedb_variant test - BEGIN" AS " "; + + +SELECT "." AS " "; +INSERT INTO CA_ICON (IC_FILENAME) +VALUES ( 'z:\resource\apps\wsficons.mif'); + +SELECT "." AS " "; +INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_UID, EN_ICON_ID ) +VALUES ( 'RealPlayer', 1, "application", 268458558 , 4 ); + +SELECT "." AS " "; +INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_UID, EN_ICON_ID ) +VALUES ( 'Videos & TV', 1, "application", 537006586 , 4 ); + + +-- insert collection +INSERT INTO COLLECTION (COLLECTION_NAME, ICON) VALUES ( 'Favorites', "qtg_large_applications_user" ); + +-- insert example urls + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ICON,ITEM_DEST, COLLECTION_NAME) + VALUES ("url", 'Facebook', 'c:\data\Images\kqticaicons\facebook.png', "http://www.facebook.com/", 'Favorites' ); + INSERT INTO ITEM_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ICON,ITEM_DEST, COLLECTION_NAME) + VALUES ("url", 'Google', 'c:\data\Images\kqticaicons\google.png', "http://www.google.com/", 'Favorites' ); + +-- insert example widgets + INSERT INTO WIDGET_TO_COLLECTION (ITEM_TYPE,ITEM_NAME,ICON, PACKAGE_UID, LIBRARY, URI, COLLECTION_NAME) + VALUES ("widget", 'aClock', 'Z:\private\20022F35\import\widgetregistry\20022F6C\tclock.png', '20022f43', 'Z:\private\20022F35\import\widgetregistry\20022F43\hsclockwidgetprovider.dll', 'homescreen.nokia.com/widget/clock', 'Office' ); + + + +SELECT "castoragedb_variant test - END" AS " "; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/corruptedcastoragedb Binary file contentstorage/castorage/tsrc/t_castorage/data/corruptedcastoragedb has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/facebook.png Binary file contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/facebook.png has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/google.png Binary file contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/google.png has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/myspace.png Binary file contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/myspace.png has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/youtube.png Binary file contentstorage/castorage/tsrc/t_castorage/data/kqticaicons/youtube.png has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/data/versioncastoragedb Binary file contentstorage/castorage/tsrc/t_castorage/data/versioncastoragedb has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../../src/*\" sbs -j 4 -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_castorage -o c:\\t_castorage.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/inc/castoragetest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/inc/castoragetest.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,241 @@ +/* + * 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: + * + */ +#ifndef CASTORAGETEST_H +#define CASTORAGETEST_H + +// INCLUDES +#include +#include +#include +#include +#include + +#include "cainnerquery.h" + +class CCaStorage; +class CCaInnerEntry; + +class CCAStorageTest : public QObject +{ + Q_OBJECT + +private slots: + + /** + * Test methods are listed below. + */ + + + + //tests for add command + void testAdd(); + //tests for add command without icon + void testAddEmptyIcon(); + //tests for add command with icon + void testAddWithIcon(); + //tests for add command with existing icon + void testAddWithExistingIcon(); + //tests for add command with existing icon where only filename specified + void testAddWithExistingIconOnlyFileName(); + //tests for add command with partly matching icon + void testAddWithPartlyMatchingIcon(); + //tests for add command with partly matching icon when not all icon params where set + void testAddWithPartlyMatchingIconNotAllParams(); + //tests for add command with not complete icon + void testAddWithNotCompleteIcon(); + //tests for add command to update icon + void testAddUpdateIcon(); + //tests for add command to update icon with the same one + void testAddUpdateIconOnlyFewParams(); + //tests for add command to update icon + void testAddUpdateWithEmptyIcon(); + //tests for add command to update icon + void testAddUpdateWithEmptyIconAdvanced(); + //tests for add command to update icon, to an already existing icon + void testAddUpdateWithExistingIcon(); + //tests for add command - add attributes + void testAddAttributes(); + //tests for add command - update attributes + void testUpdateAttributes(); + //tests for add command - remove attributes + void testDeleteAttributes(); + //tests for remove command + void testRemoveOneEntryWithIcon(); + + void testRemoveOneEntryWhenIconIsUseByOtherEntry(); + + void testRemoveTwoEntriesWithSameIcon(); + + void testRemoveOneEntryWithoutIcon(); + + void testRemove5Entries(); + + void testRemoveEntriesWithIdOutOFBound(); + + void testTouch(); + + void testTouch2Times(); + + void testTouch5Entries(); + + void testRemoveOldFromLaunch(); + + void testRemoveOldWhen2DifferentLaunchTimes(); + + //tests getentries by id. + void testGetEntriesById(); + + //tests getentries by group id. + void testGetEntriesByGroupId(); + + //tests getentries by group id. + void testGetEntriesByTypeName(); + + //tests getentries sorted by name. + void testGetEntriesSortByName(); + + //tests getentries sorted by created timestamp. + void testGetEntriesSortByCreatedTimestamp(); + + //tests getentries sorted by most used timestamp. + void testGetEntriesSortByMostUsedTimestamp(); + + //tests getentries sorted by last used timestamp. + void testGetEntriesSortByLastUsedTimestamp(); + + //tests getentries sorted by default. + void testGetEntriesSortByDefault(); + + //tests getentries by flags. + void testGetEntriesByFlags(); + + //tests getentries by flags off. + void testGetEntriesByFlagsOff(); + + //tests getentries by flags on. + void testGetEntriesByFlagsOn(); + + //tests getentries by flags on. + void testGetEntriesByRole(); + + //tests getentries by flags. + void testGetEntriesByUid(); + + //tests getentries by attributes. + void testGetEntriesByAttributes(); + + //tests getentries by attributes. + void testGetEntriesByAttributes2(); + + //tests getentries by child Id. + void testGetEntriesByChildId(); + + //tests organize remove. + void testOrganizeRemove(); + + //tests organize append. + void testOrganizeAppend(); + + //tests organize prepend. + void testOrganizePrepend(); + + //tests organize insert new entry into group. + void testOrganizeInsertNewIntoGroup(); + + //tests organize get entries' ids. + void testGetEntriesIds(); + + //tests organize bad parameters case. + void testOrganizeBadParams(); + + void testGetNewEntryWithAttributes(); + + void testGetNewEntryWithAttributesByUid(); + + void testGetEntriesWhenLimitSetTo(); + + //tests custom sort + void testCustomSort(); + + //tests get parent ids + void testGetParentIds(); + + void testGetParentIdsInLoop(); + + //tests properties + void testPropertyGetDbVersion(); + + void testPropertyGetLanguage(); + + void testLoadDBFromROM(); + + //tests localization + void testRemoveFromLocalizationAfterNameChange(); + + void testGetLocalizations(); + + void testLocalizeEntry(); + + void testAddLocalizationEntry(); + + void testUpdateLocalizationEntry(); + + void testSaveRestoreDatabase(); + + + //unused + //void testBadDBVersion(); + + void init(); // called before each test method + void cleanup(); // called after each test method + void initTestCase(); // called once before all test methods + void cleanupTestCase(); // caled once after all test methods + /** + * Utility methods are listed below. + */ + + // Test that two data arrays have opposite order. + + +private: + TInt locEntriesCount(); + + +protected: + + + /** + * Utils methods are listed below. + */ + TInt verifyOppositeOrder(RPointerArray& aArray1, + RPointerArray& aArray2); + + TInt testSortingBySortOrder(CCaInnerQuery::TSortAttribute sortAttr1, + CCaInnerQuery::TSortAttribute sortAttr2); + + TInt testSortingBySortOrder(CCaInnerQuery *aInnerQuery1, + CCaInnerQuery *aInnerQuery2); + void RestoreDatabase(); + void CopyFile(const TDesC &aSorcePath, const TDesC &aDestinationPath); + QString descToQString(const TDesC &descriptor); +private: + + CCaStorage *mStorage; + +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/inc/castoragetestsqlcommands.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/inc/castoragetestsqlcommands.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,91 @@ +/* + * 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: + * + */ + +#ifndef CASTORAGETESTSQLCOMMANDS_H_ +#define CASTORAGETESTSQLCOMMANDS_H_ + +_LIT(KSQLGetEntryTimestamp, "SELECT EN_CREATION_TIME AS Data FROM CA_ENTRY where ENTRY_ID = :ENTRY_ID0 "); + +// add tests +_LIT(KTestName, "AddTest"); +_LIT(KTestName1, "TestName1"); +_LIT(KTestName2, "TestName2"); +_LIT(KTestNameUpdate, "AddTestUpdate"); +_LIT(KTypeName, "Folder"); +_LIT(KTypeName2, "application"); +const TUint flag = 4; +const TUint flagUpdate = 8; + +_LIT(KAttrName_1, "Attribute_Name_1"); +_LIT(KAttrName_2, "Attribute_Name_2"); +_LIT(KAttrName_3, "Attribute_Name_3"); +_LIT(KAttrValue_1, "Attribute_Value_1"); +_LIT(KAttrValue_2, "Attribute_Value_2"); +_LIT(KAttrValue_3, "Attribute_Value_3"); + +_LIT(KSQLCheckAttribute, "SELECT * FROM CA_ATTRIBUTE \ +WHERE AT_ENTRY_ID = :ENTRY_ID"); + +_LIT(KSQLGetAttribute, "SELECT * FROM CA_ATTRIBUTE WHERE AT_ENTRY_ID = :AT_ENTRY_ID"); + +// remove tests +_LIT(KSQLGetIdCountFromEntryTable,"SELECT COUNT(*) AS Data FROM CA_ENTRY"); +_LIT(KSQLGetIdCountFromIconTable,"SELECT COUNT(*) AS Data FROM CA_ICON"); + +// touch +_LIT(KSQLGetIdCountFromLaunchTable,"SELECT COUNT(*) AS Data FROM CA_LAUNCH"); +_LIT(KSQLGetUsedFlagCountFromEntryTable, "SELECT COUNT(*) AS Data FROM CA_ENTRY \ +WHERE EN_FLAGS & :EN_FLAGS = :EN_FLAGS"); + +const TInt KErrNoData = 1001; +const TInt KErrWrongData = 1002; +const TInt KErrBadParams = 1003; + +const TInt KAllCollectionsGroupId = 2; +const TInt KMaxFlagsMask = 63; +const TInt KMaxFlagsMaskForCombinedTest = 15; +const TInt KCalendarAppUid = 268458241; +const TInt KTestAppUid = 268458111; +const TInt KTestAppUid2 = 268458112; + +_LIT(KTypeNameApplication, "application"); +_LIT(KTypeNameFolder, "folder"); + +//organize tests +_LIT(KSQLGetUnexistingIdFromGroup,"SELECT MAX(GE_ENTRY_ID) + 1 AS Data FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = :GE_GROUP_ID"); + +// GE_ENTRY_ID AS GE_GROUP_ID because we don't have proper execute +_LIT(KSQLGetEntryIdsFromGroupInPositionOrder, "SELECT GE_ENTRY_ID AS GE_GROUP_ID FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = :GE_GROUP_ID ORDER BY GE_POSITION"); + +//get entries tests +_LIT(KSQLGetEntriesCountFromSpecificGroup, "SELECT COUNT(*) AS Data FROM CA_GROUP_ENTRY \ +WHERE GE_GROUP_ID = :GE_GROUP_ID"); + +_LIT(KSQLGetEntriesCountAsParentsForSpecificEntry, "SELECT COUNT(*) AS Data FROM CA_GROUP_ENTRY \ +WHERE GE_ENTRY_ID = :GE_ENTRY_ID"); + +_LIT(KSQLGetIdEntryFromSpecificGroup, "SELECT GE_ENTRY_ID AS ENTRY_ID FROM CA_GROUP_ENTRY \ +WHERE GE_GROUP_ID = :GE_GROUP_ID"); +const TUint KFlagsOnTable[5] = { 0, 2, 5, 36, 60 }; +const TUint KFlagsOffTable[5] = { 1, 2, 6, 18, 25 }; +const TUint KFlagsOffTableMasks[5] = { 30, 29, 25, 13, 6 }; + +// localization +_LIT(KSQLCountFromLocalizationTable,"SELECT COUNT(*) AS Data FROM CA_LOCALIZATION_TEXT"); + + +#endif /* CASTORAGETESTSQLCOMMANDS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_castorage_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\sis\rd.cer -key ..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castorageapiutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castorageapiutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,108 @@ +/* + * 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 "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include +#include + +// constants +const QString srcDbFileName("c:/testing/data/t_castorage/castorage.db"); +const QString dstDbFileName("c:/castorage.db"); + + +// ============================ MEMBER FUNCTIONS =============================== + + +void CCAStorageTest::initTestCase() +{ + QFile leftOverDbFile(dstDbFileName); + leftOverDbFile.open(QIODevice::ReadWrite); + leftOverDbFile.remove(); + +} + +void CCAStorageTest::cleanupTestCase() +{ + QFile leftOverDbFile(dstDbFileName); + leftOverDbFile.open(QIODevice::ReadWrite); + leftOverDbFile.remove(); +} + +// ----------------------------------------------------------------------------- +// +void CCAStorageTest::init() +{ + RestoreDatabase(); + + TRAPD(err, + mStorage = CaStorageFactory::NewDatabaseL(); + ); + + QCOMPARE(err, KErrNone); +} +// ----------------------------------------------------------------------------- +// +void CCAStorageTest::cleanup() +{ + delete mStorage; + mStorage = NULL; +} + +// ----------------------------------------------------------------------------- +// +void CCAStorageTest::RestoreDatabase() +{ + QFile leftOverDbFile(dstDbFileName); + leftOverDbFile.open(QIODevice::ReadWrite); + leftOverDbFile.remove(); + leftOverDbFile.close(); + + QFile srcDbFile(srcDbFileName); + srcDbFile.open(QIODevice::ReadWrite); + srcDbFile.copy(dstDbFileName); + QTest::qWait(1000); +} + +// ----------------------------------------------------------------------------- +// +void CCAStorageTest::CopyFile(const TDesC &aSorcePath, + const TDesC &aDestinationPath) +{ + RFs fs; + User::LeaveIfError(fs.Connect()); + + CFileMan *fileMan = CFileMan::NewL(fs); + CleanupStack::PushL(fileMan); + + TInt error = fileMan->Copy(aSorcePath, aDestinationPath); + + CleanupStack::PopAndDestroy(fileMan); + + fs.Close(); +} + + +QString CCAStorageTest::descToQString(const TDesC &descriptor) +{ + return XQConversions::s60DescToQString(descriptor); +} + + + +QTEST_MAIN(CCAStorageTest); diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestadd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestadd.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,1047 @@ +/* +* 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: +* +*/ +/* + * castoragetestadd.cpp + * + * Created on: 2009-08-05 + * Author: michal.czerwiec + */ + + +#include "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "cainnerentry.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "castoragetestsqlcommands.h" +#include "caarraycleanup.inl" +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAdd() +{ + __UHEAP_MARK; + TInt entryId(0); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + mStorage->AddL(innerEntry); + entryId = innerEntry->GetId(); + + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + QVERIFY(entryId > 0); + + __UHEAP_MARKEND; + +} +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddEmptyIcon() +{ + TInt entryId(0); + __UHEAP_MARK; + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(KNullDesC, KNullDesC, KNullDesC); + mStorage->AddL(innerEntry); + entryId = innerEntry->GetId(); + CleanupStack::PopAndDestroy(innerEntry); + ); + QCOMPARE(err, KErrNone); + QVERIFY(entryId > 0); + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddWithIcon() +{ + __UHEAP_MARK; + TInt entryId(0); + TInt iconId(0); + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("qtg_large_applications_user"), KNullDesC, KNullDesC); + mStorage->AddL(innerEntry); + + entryId = innerEntry->GetId(); + iconId = innerEntry->GetIconId(); + + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddWithExistingIcon() +{ + __UHEAP_MARK; + TInt entryId1(0); + TInt iconId1(0); + TInt entryId2(0); + TInt iconId2(0); + TInt countIconsAfterFirstAdd (0); + TInt countIconsAfterSecondAdd (0); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + mStorage->AddL(innerEntry); + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterFirstAdd); + CleanupStack::PopAndDestroy(query); + + // Add second entry with the some icon + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Group); + innerEntry2->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + mStorage->AddL(innerEntry2); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterSecondAdd); + CleanupStack::PopAndDestroy(query); + + entryId1 = innerEntry->GetId(); + iconId1 = innerEntry->GetIconId(); + + entryId2 = innerEntry2->GetId(); + iconId2 = innerEntry2->GetIconId(); + + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + + // No new icon created; Icon which is the same should be shared by newly added entries + QCOMPARE(countIconsAfterFirstAdd, countIconsAfterSecondAdd); + + QVERIFY(entryId1 > 0); + QVERIFY(iconId1 > 0); + QVERIFY(entryId2 > 0); + QVERIFY(iconId2 > 0); + QVERIFY(!(entryId1 == entryId2)); + QCOMPARE(iconId1, iconId2); + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddWithExistingIconOnlyFileName() +{ + __UHEAP_MARK; + TInt entryId1(0); + TInt iconId1(0); + TInt entryId2(0); + TInt iconId2(0); + TInt countIconsAfterFirstAdd (0); + TInt countIconsAfterSecondAdd (0); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("qtg_large_applications_user"), KNullDesC, KNullDesC); + mStorage->AddL(innerEntry); + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterFirstAdd); + CleanupStack::PopAndDestroy(query); + + // Add second entry with the some icon + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Group); + innerEntry2->SetIconDataL(_L("qtg_large_applications_user"), KNullDesC, KNullDesC); + mStorage->AddL(innerEntry2); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterSecondAdd); + CleanupStack::PopAndDestroy(query); + + entryId1 = innerEntry->GetId(); + iconId1 = innerEntry->GetIconId(); + + entryId2 = innerEntry2->GetId(); + iconId2 = innerEntry2->GetIconId(); + + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + + ); + + QCOMPARE(err, KErrNone); + + // No new icon created; Icon which is the same should be shared by newly added entries + QCOMPARE(countIconsAfterFirstAdd, countIconsAfterSecondAdd); + + + QVERIFY(entryId1 > 0); + QVERIFY(iconId1 > 0); + QVERIFY(entryId2 > 0); + QVERIFY(iconId2 > 0); + QVERIFY(!(entryId1 == entryId2)); + QCOMPARE(iconId1, iconId2); + + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddWithPartlyMatchingIcon() +{ + __UHEAP_MARK; + TInt entryId1(0); + TInt iconId1(0); + TInt entryId2(0); + TInt iconId2(0); + TInt countIconsAfterFirstAdd (0); + TInt countIconsAfterSecondAdd (0); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + mStorage->AddL(innerEntry); + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterFirstAdd); + CleanupStack::PopAndDestroy(query); + + // Add second entry with the some icon + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Group); + innerEntry2->SetIconDataL(_L("filename"), _L("skinId2"), _L("111111111")); + mStorage->AddL(innerEntry2); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterSecondAdd); + CleanupStack::PopAndDestroy(query); + + entryId1 = innerEntry->GetId(); + iconId1 = innerEntry->GetIconId(); + + entryId2 = innerEntry2->GetId(); + iconId2 = innerEntry2->GetIconId(); + + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + + // New icon should be added + QCOMPARE(countIconsAfterSecondAdd - countIconsAfterFirstAdd, 1); + + QVERIFY(entryId1 > 0); + QVERIFY(iconId1 > 0); + QVERIFY(entryId2 > 0); + QVERIFY(iconId2 > 0); + QVERIFY(!(entryId1 == entryId2)); + QVERIFY(!(iconId1 == iconId2)); + + __UHEAP_MARKEND; +} + + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddWithPartlyMatchingIconNotAllParams() +{ + __UHEAP_MARK; + TInt entryId1(0); + TInt iconId1(0); + TInt entryId2(0); + TInt iconId2(0); + TInt countIconsAfterFirstAdd (0); + TInt countIconsAfterSecondAdd (0); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), KNullDesC); + mStorage->AddL(innerEntry); + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterFirstAdd); + CleanupStack::PopAndDestroy(query); + + // Add second entry with the some icon + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Group); + innerEntry2->SetIconDataL(KNullDesC, _L("skinId"), KNullDesC); + mStorage->AddL(innerEntry2); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterSecondAdd); + CleanupStack::PopAndDestroy(query); + + entryId1 = innerEntry->GetId(); + iconId1 = innerEntry->GetIconId(); + + entryId2 = innerEntry2->GetId(); + iconId2 = innerEntry2->GetIconId(); + + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + + // New icon should be added + QCOMPARE(countIconsAfterSecondAdd - countIconsAfterFirstAdd, 1); + + QVERIFY(entryId1 > 0); + QVERIFY(iconId1 > 0); + QVERIFY(entryId2 > 0); + QVERIFY(iconId2 > 0); + QVERIFY(!(entryId1 == entryId2)); + QVERIFY(!(iconId1 == iconId2)); + + __UHEAP_MARKEND; +} + + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddWithNotCompleteIcon() +{ + TInt entryId(0); + TInt iconId(0); + __UHEAP_MARK; + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("fake"), KNullDesC, KNullDesC); + mStorage->AddL(innerEntry); + + entryId = innerEntry->GetId(); + iconId = innerEntry->GetIconId(); + + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddUpdateIcon() +{ + TInt entryId(0); + TInt iconId(0); + TInt updatedEntryId(0); + TInt updatedIconId(0); + TInt countIconsAfterAdd (0); + TInt countIconsAfterUpdate (0); + + RBuf updatedIconFileName; + RBuf updatedIconSkinId; + RBuf updatedIconAppId; + TInt updatedIconIdFormIcon(0); + + __UHEAP_MARK; + updatedIconFileName.CreateL( KMaxFileName ); + updatedIconSkinId.CreateL( KMaxFileName ); + updatedIconAppId.CreateL( KMaxUidName ); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + mStorage->AddL(innerEntry); + + // Check db after add with icon + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterAdd); + CleanupStack::PopAndDestroy(query); + + entryId = innerEntry->GetId(); + iconId = innerEntry->GetIconId(); + + innerEntry->SetTextL(KTestNameUpdate); + innerEntry->SetFlags(flagUpdate); + innerEntry->SetIconDataL( _L("filename2"), _L("skinId2"), _L("537001519")); + mStorage->AddL(innerEntry); + + // Check db after update with icon + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterUpdate); + CleanupStack::PopAndDestroy(query); + + updatedEntryId = innerEntry->GetId(); + updatedIconId = innerEntry->GetIconId(); + + updatedIconFileName = innerEntry->Icon()->FileName(); + updatedIconSkinId= innerEntry->Icon()->SkinId(); + updatedIconAppId = innerEntry->Icon()->ApplicationId(); + updatedIconIdFormIcon = innerEntry->Icon()->Id(); + + + + CleanupStack::PopAndDestroy(innerEntry); + ); + QCOMPARE(err, KErrNone); + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + QCOMPARE(updatedEntryId, entryId); + QCOMPARE(updatedIconId, iconId); + QCOMPARE(updatedIconIdFormIcon, updatedIconId); + QVERIFY(!updatedIconFileName.Compare(_L("filename2"))); + QVERIFY(!updatedIconSkinId.Compare(_L("skinId2"))); + QVERIFY(!updatedIconAppId.Compare(_L("537001519"))); + + // No new icon should be added to DB + QCOMPARE(countIconsAfterAdd, countIconsAfterUpdate); + + + updatedIconFileName.Close(); + updatedIconSkinId.Close(); + updatedIconAppId.Close(); + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddUpdateIconOnlyFewParams() +{ + TInt entryId(0); + TInt iconId(0); + TInt updatedEntryId(0); + TInt updatedIconId(0); + TInt countIconsAfterAdd (0); + TInt countIconsAfterUpdate (0); + + + RBuf updatedIconFileName; + RBuf updatedIconSkinId; + RBuf updatedIconAppId; + TInt updatedIconIdFormIcon(0); + + __UHEAP_MARK; + updatedIconFileName.CreateL( KMaxFileName ); + updatedIconSkinId.CreateL( KMaxFileName ); + updatedIconAppId.CreateL( KMaxUidName ); + + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), KNullDesC, _L("268458321")); + mStorage->AddL(innerEntry); + + // Check db after add with icon + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterAdd); + CleanupStack::PopAndDestroy(query); + + + entryId = innerEntry->GetId(); + iconId = innerEntry->GetIconId(); + + innerEntry->SetTextL(KTestNameUpdate); + innerEntry->SetFlags(flagUpdate); + innerEntry->SetIconDataL( _L("filename2"), KNullDesC, _L("537001519")); + mStorage->AddL(innerEntry); + + // Check db after update with icon + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterUpdate); + CleanupStack::PopAndDestroy(query); + + + updatedEntryId = innerEntry->GetId(); + updatedIconId = innerEntry->GetIconId(); + + updatedIconFileName = innerEntry->Icon()->FileName(); + updatedIconSkinId= innerEntry->Icon()->SkinId(); + updatedIconAppId = innerEntry->Icon()->ApplicationId(); + updatedIconIdFormIcon = innerEntry->Icon()->Id(); + + + + CleanupStack::PopAndDestroy(innerEntry); + ); + QCOMPARE(err, KErrNone); + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + QCOMPARE(updatedEntryId, entryId); + QCOMPARE(updatedIconId, iconId); + QCOMPARE(updatedIconIdFormIcon, updatedIconId); + QVERIFY(!updatedIconFileName.Compare(_L("filename2"))); + QVERIFY(!updatedIconSkinId.Compare(KNullDesC)); + QVERIFY(!updatedIconAppId.Compare(_L("537001519"))); + // No new icon should be added to DB + QCOMPARE(countIconsAfterAdd, countIconsAfterUpdate); + + updatedIconFileName.Close(); + updatedIconSkinId.Close(); + updatedIconAppId.Close(); + __UHEAP_MARKEND; +} + + + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddUpdateWithEmptyIcon() +{ + TInt countIconsAfterAdd(0); + TInt countIconsAfterUpdateWithEmptyIcon(0); + TInt entryId(0); + TInt iconId(0); + __UHEAP_MARK; + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + // Add entry with icon - not null icon + mStorage->AddL(innerEntry); + + // Check db after add with icon + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + + query->ExecuteL(countIconsAfterAdd); + + + CleanupStack::PopAndDestroy(query); + + entryId = innerEntry->GetId(); + iconId = innerEntry->GetIconId(); + + //CCaInnerEntry::TIconAttributes attr; + innerEntry->SetTextL(KTestNameUpdate); + innerEntry->SetFlags(flagUpdate); + //innerEntry->SetIconId( 0 ); + innerEntry->SetIconDataL(KNullDesC, KNullDesC, KNullDesC); + //attr = innerEntry->GetIcon(); + // Update entry with empty icon + mStorage->AddL(innerEntry); + + // Check db after update with empty icon + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterUpdateWithEmptyIcon); + + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(innerEntry); + ); + + QCOMPARE(err, KErrNone); + + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + // icon should be removed from db because we set params to NULL + QCOMPARE(countIconsAfterAdd - countIconsAfterUpdateWithEmptyIcon, 1); + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddUpdateWithEmptyIconAdvanced() +{ + TInt countIconsAfterAdd(0); + TInt countIconsAfterUpdateWithEmptyIcon(0); + TInt entryId(0); + TInt iconId(0); + __UHEAP_MARK; + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + // Add entry with icon - not null icon + mStorage->AddL(innerEntry); + + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Group); + innerEntry2->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + // Add second entry with the some icon - not null icon + mStorage->AddL(innerEntry2); + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + + query->ExecuteL(countIconsAfterAdd); + CleanupStack::PopAndDestroy(query); + + entryId = innerEntry->GetId(); + + iconId = innerEntry->GetIconId(); + + innerEntry->SetTextL(KTestNameUpdate); + innerEntry->SetFlags(flagUpdate); + //innerEntry->SetIconId( 0 ); + innerEntry->SetIconDataL(KNullDesC, KNullDesC, KNullDesC); + // Update entry with empty icon + mStorage->AddL(innerEntry); + + + // Check db after update with empty icon + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterUpdateWithEmptyIcon); + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + ); + QCOMPARE(err, KErrNone); + + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + + // icon shouldn't be removed from db because it is use by other entry + QCOMPARE(countIconsAfterUpdateWithEmptyIcon, countIconsAfterAdd); + + __UHEAP_MARKEND; +} + + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddUpdateWithExistingIcon() +{ + TInt countIconsAfterAdd(0); + TInt countIconsAfterUpdateWithEmptyIcon(0); + TInt entryId(0); + TInt iconId(0); + __UHEAP_MARK; + TRAPD(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("158321")); + // Add entry with icon - not null icon + mStorage->AddL(innerEntry); + + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Group); + innerEntry2->SetIconDataL(_L("filename2"), _L("skinId2"), KNullDesC); + + // Add second entry with the some icon - not null icon + mStorage->AddL(innerEntry2); + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + + query->ExecuteL(countIconsAfterAdd); + CleanupStack::PopAndDestroy(query); + + entryId = innerEntry->GetId(); + + iconId = innerEntry->GetIconId(); + + innerEntry->SetTextL(KTestNameUpdate); + innerEntry->SetFlags(flagUpdate); + //innerEntry->SetIconId( 0 ); + innerEntry->SetIconDataL(_L("filename2"), _L("skinId2"), KNullDesC); + // Update entry with empty icon + mStorage->AddL(innerEntry); + + + // Check db after update with empty icon + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + query->ExecuteL(countIconsAfterUpdateWithEmptyIcon); + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + ); + QCOMPARE(err, KErrNone); + + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + + // icon shouldn't be removed from db because it is use by other entry + QCOMPARE(countIconsAfterUpdateWithEmptyIcon, countIconsAfterAdd); + + __UHEAP_MARKEND; +} + + + +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testAddAttributes() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; + TRAP(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewL(); + RPointerArray innerEntryArray; + CleanupResetAndDestroyPushL(innerEntryArray); + innerEntryArray.AppendL(innerEntry); + + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + // check status + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLCheckAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindEntryIdL(innerEntry->GetId()); + RPointerArray entryArray; + CleanupResetAndDestroyPushL(entryArray); + TInt count = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + CleanupStack::PopAndDestroy(&entryArray); + + if (innerEntry->GetId() > 0) + if (innerEntry->GetIconId() > 0) + if (innerEntry->GetAttributes().Count() == count) { + err = KErrNone; + } else + err = KErrArgument; + else + err = KErrNotFound; + else + err = KErrNotFound; + + if (!err) { + query->SetQueryL(KSQLGetAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindValuesForAddAttributeL(innerEntry, NULL); + query->ExecuteL(innerEntryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + RCaEntryAttrArray attributes = innerEntry->GetAttributes(); + + if (!( + (attributes[0])->Name().Compare(KAttrName_1) + && (attributes[0])->Value().Compare(KAttrValue_1) + && (attributes[1])->Name().Compare(KAttrName_2) + && (attributes[1])->Value().Compare(KAttrValue_2) + && (attributes[2])->Name().Compare(KAttrName_3) + && (attributes[2])->Value().Compare(KAttrValue_3) + )) + err = KErrNone; + else + err = KErrNotSupported; + } + + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(&innerEntryArray); + ); + + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testUpdateAttributes() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; +// TRAP(err, + CCaInnerEntry *innerEntry = CCaInnerEntry::NewL(); + RPointerArray innerEntryArray; + CleanupResetAndDestroyPushL(innerEntryArray); + innerEntryArray.AppendL(innerEntry); + + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + // check status + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLCheckAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindEntryIdL(innerEntry->GetId()); + RPointerArray entryArray; + CleanupResetAndDestroyPushL(entryArray); + TInt count = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + CleanupStack::PopAndDestroy(&entryArray); + + if (innerEntry->GetId() > 0) + if (innerEntry->GetIconId() > 0) + if (innerEntry->GetAttributes().Count() == count) { + err = KErrNone; + } else + err = KErrArgument; + else + err = KErrNotFound; + else + err = KErrNotFound; + + if (!err) { + innerEntry->AddAttributeL(KAttrName_2, KAttrName_1); + mStorage->AddL(innerEntry); + // check status + query->SetQueryL(KSQLCheckAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindEntryIdL(innerEntry->GetId()); + RPointerArray entryArray; + CleanupResetAndDestroyPushL(entryArray); + TInt count = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + CleanupStack::PopAndDestroy(&entryArray); + + RCaEntryAttrArray attributes = innerEntry->GetAttributes(); + if (innerEntry->GetAttributes().Count() == count) { + if (!( + (attributes[0])->Name().Compare(KAttrName_1) + && (attributes[0])->Value().Compare(KAttrValue_1) + && (attributes[1])->Name().Compare(KAttrName_2) + && (attributes[1])->Value().Compare(KAttrValue_1) + && (attributes[2])->Name().Compare(KAttrName_3) + && (attributes[2])->Value().Compare(KAttrValue_3) + )) { + innerEntry->RemoveAttributeL(KAttrName_1); + innerEntry->RemoveAttributeL(KAttrName_2); + innerEntry->RemoveAttributeL(KAttrName_3); + query->SetQueryL(KSQLGetAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindValuesForAddAttributeL(innerEntry, NULL); + query->ExecuteL(innerEntryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + + RCaEntryAttrArray newAttributes = innerEntry->GetAttributes(); + if (!( + (newAttributes[0])->Name().Compare(KAttrName_1) + && (newAttributes[0])->Value().Compare(KAttrValue_1) + && (newAttributes[1])->Name().Compare(KAttrName_2) + && (newAttributes[1])->Value().Compare(KAttrValue_1) + && (newAttributes[2])->Name().Compare(KAttrName_3) + && (newAttributes[2])->Value().Compare(KAttrValue_3) + )) + err = KErrNone; + else + err = KErrNotSupported; + } else { + err = KErrNotReady; + } + } else + err = KErrNotReady; + } + + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(&innerEntryArray); +// ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testDeleteAttributes() +{ + TInt entryId(0); + TInt iconId(0); + TInt attributesACount(0); + TInt queryAResultCount(0); + TInt attributesBCount(0); + TInt queryBResultCount(0); + __UHEAP_MARK; + TRAPD(err, + // A query section starts + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Group); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + // check status + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLCheckAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindEntryIdL(innerEntry->GetId()); + RPointerArray entryArray; + CleanupResetAndDestroyPushL(entryArray); + queryAResultCount = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + CleanupStack::PopAndDestroy(&entryArray); + + if (!err) { + entryId = innerEntry->GetId(); + iconId = innerEntry->GetIconId(); + attributesACount = innerEntry->GetAttributes().Count(); + + // B query section starts + + innerEntry->RemoveAttributeL(KAttrName_1); + innerEntry->RemoveAttributeL(KAttrName_2); + innerEntry->RemoveAttributeL(KAttrName_3); + mStorage->AddL(innerEntry); + // check status + query->SetQueryL(KSQLCheckAttribute); + query->SetTableType(CCaSqlQuery::EAttributeTable); + query->PrepareL(); + query->BindEntryIdL(innerEntry->GetId()); + RPointerArray entryArray; + CleanupResetAndDestroyPushL(entryArray); + queryBResultCount= query->ExecuteL(entryArray, CCaSqlQuery::EAttribute); + query->CloseStatement(); + CleanupStack::PopAndDestroy(&entryArray); + attributesBCount = innerEntry->GetAttributes().Count(); + } + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(innerEntry); + ); + __UHEAP_MARKEND; + + QVERIFY(entryId > 0); + QVERIFY(iconId > 0); + QCOMPARE(queryAResultCount, attributesACount); + QCOMPARE(queryBResultCount, 0); + QCOMPARE(queryBResultCount, attributesBCount); +} +// end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestbackup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestbackup.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +/* +* 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: +* +*/ +/* + * castoragetestgetparentids.cpp + * + * Created on: 2009-09-14 + * Author: michal.czerwiec + */ + +#include "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "cainnerentry.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "castoragetestsqlcommands.h" +#include "casqlcommands.h" + + + +void CCAStorageTest::testSaveRestoreDatabase() +{ + + TBool result = EFalse; + TRAPD(err, + RFs fs; + User::LeaveIfError(fs.Connect()); + + CCaSqLiteStorage *storage = dynamic_cast(mStorage); + if( BaflUtils::FileExists( fs, storage->iPrivatePathCDriveDbBackup) ) + { + BaflUtils::DeleteFile(fs, storage->iPrivatePathCDriveDbBackup); + } + + mStorage->SaveDatabaseL(); + + mStorage->RestoreDatabaseL(); + + + if( BaflUtils::FileExists( fs, storage->iPrivatePathCDriveDbBackup) ) + { + result = ETrue; + BaflUtils::DeleteFile(fs, storage->iPrivatePathCDriveDbBackup); + } + fs.Close(); + ); + + QCOMPARE(err, KErrNone); + QVERIFY(result); +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestgetentries.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestgetentries.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,1480 @@ +/* +* 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: +* +*/ +/* + * castoragetestgetentries.cpp + * + * Created on: 2009-08-05 + * Author: michal.czerwiec + */ + +#include +#include +#include +#include +#include + +#include "castoragetest.h" +#include "cainnerquery.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "cainnerentry.h" +#include "castoragetestsqlcommands.h" +#include "casqlcommands.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "cadef.h" + + +// --------------------------------------------------------------------------- +// Test that two data arrays have opposite order. +// +// --------------------------------------------------------------------------- +// +TInt CCAStorageTest::verifyOppositeOrder(RPointerArray& aArray1, + RPointerArray& aArray2) +{ + TInt err; + + __UHEAP_MARK; + + err = (aArray1.Count() == aArray2.Count())? KErrNone : KErrWrongData; + if (!err) { + TInt count(aArray1.Count()); + for (TInt i = 0; i < aArray1.Count(); i++) { + if (aArray1[i]->GetId() != aArray2[count-1-i]->GetId()) { + err = KErrWrongData; + break; + } + } + } + + __UHEAP_MARKEND; + + return err; +} + +// --------------------------------------------------------------------------- +// Test Sorting Order giving different attributes. +// +// --------------------------------------------------------------------------- +// +TInt CCAStorageTest::testSortingBySortOrder(CCaInnerQuery::TSortAttribute sortAttr1, + CCaInnerQuery::TSortAttribute sortAttr2) +{ + + __UHEAP_MARK; + + TRAPD(err, + CCaInnerQuery *innerQuery1 = CCaInnerQuery::NewLC(); + innerQuery1->SetSort(sortAttr1); + + CCaInnerQuery *innerQuery2 = CCaInnerQuery::NewLC(); + innerQuery2->SetSort(sortAttr2); + + err = testSortingBySortOrder(innerQuery1, innerQuery2); + + CleanupStack::PopAndDestroy(innerQuery2); + CleanupStack::PopAndDestroy(innerQuery1); + ); + __UHEAP_MARKEND; + + return err; +} + + +// --------------------------------------------------------------------------- +// Test Sorting Order giving different attributes. +// +// --------------------------------------------------------------------------- +// +TInt CCAStorageTest::testSortingBySortOrder(CCaInnerQuery *aInnerQuery1, + CCaInnerQuery *aInnerQuery2) +{ + __UHEAP_MARK; + TInt err(KErrNone); + RPointerArray resultArray; + TRAP(err, + CleanupResetAndDestroyPushL(resultArray); + mStorage->GetEntriesL(aInnerQuery1,resultArray); + + RPointerArray resultArrayDesc; + CleanupResetAndDestroyPushL(resultArrayDesc); + mStorage->GetEntriesL(aInnerQuery2,resultArrayDesc); + + err = (resultArray.Count() > 0)? KErrNone : KErrWrongData; + + if (err == KErrNone) { + err = (resultArrayDesc.Count() > 0)? KErrNone : KErrWrongData; + } + + if (err == KErrNone) { + err = verifyOppositeOrder(resultArray, resultArrayDesc); + } + CleanupStack::PopAndDestroy(&resultArrayDesc); + CleanupStack::PopAndDestroy(&resultArray); + ); + + + __UHEAP_MARKEND; + + return err; +} +// --------------------------------------------------------------------------- +// Test Select several entries by id. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesById() +{ + __UHEAP_MARK; + { + QList expectedIdList; + expectedIdList << 1 << 2 << 3 << 4 << 5 << 6; + QList actualIdList; + + + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + RArray idArray; + CleanupClosePushL(idArray); + idArray.AppendL(expectedIdList[0]); + idArray.AppendL(expectedIdList[1]); + idArray.AppendL(expectedIdList[2]); + idArray.AppendL(expectedIdList[3]); + idArray.AppendL(expectedIdList[4]); + idArray.AppendL(expectedIdList[5]); + + innerQuery->SetIdsL(idArray); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + mStorage->GetEntriesL(innerQuery,resultArray); + + // check if the actual items were returned + for (TInt i = 0; i < resultArray.Count(); i++) { + actualIdList << resultArray[i]->GetId(); + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(&idArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + + + QCOMPARE(err, KErrNone); + QCOMPARE(actualIdList, expectedIdList); + } + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// Test Select entries by group id. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByGroupId() +{ + TInt expectedGroupEntryCount(0); + TInt actualGroupEntryCount(0); + + __UHEAP_MARK; + + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + + // check before test entries count in sfecific group + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetEntriesCountFromSpecificGroup); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEIdGroup), KAllCollectionsGroupId); + + query->ExecuteL(expectedGroupEntryCount); + + CleanupStack::PopAndDestroy(query); + + innerQuery->SetParentId(KAllCollectionsGroupId); + + // get entries from specific group + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + mStorage->GetEntriesL(innerQuery, resultArray); + + actualGroupEntryCount = resultArray.Count(); + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); + QCOMPARE(actualGroupEntryCount, expectedGroupEntryCount); +} + +// --------------------------------------------------------------------------- +// Test Select entries by group id. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByTypeName() +{ + bool nonWidgetEntryFound(false); + const int expectedNumberOfWidgets(2); + int numberOfWidgetsFound(0); + + __UHEAP_MARK; + + _LIT(KTypeNameWidget, "Widget"); + + TRAPD(err, + // add 2 new entries - typename widget + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName1); + innerEntry->SetEntryTypeNameL(KTypeNameWidget); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Item); + mStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + + innerEntry = CCaInnerEntry::NewLC(); + innerEntry->SetTextL(KTestName2); + innerEntry->SetEntryTypeNameL(KTypeNameWidget); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Item); + mStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(innerEntry); + + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat *typenameArray = new(ELeave) CDesC16ArrayFlat(KDefaultGranularity); + CleanupStack::PushL(typenameArray); + + TBufC<20> typeName(KTypeNameWidget); + typenameArray->AppendL(typeName); + + innerQuery->SetEntryTypeNames(typenameArray); + CleanupStack::Pop(typenameArray); + + // get entries from specific group + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + + // get entries - widgets + mStorage->GetEntriesL(innerQuery,resultArray); + + numberOfWidgetsFound = resultArray.Count(); + // check results + for (TInt i = 0; i < numberOfWidgetsFound; ++i) { + if ((resultArray[i]->GetEntryTypeName()).Compare( + KTypeNameWidget) != 0) { + nonWidgetEntryFound = true; + } + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); + QCOMPARE(numberOfWidgetsFound, expectedNumberOfWidgets); + QVERIFY(!nonWidgetEntryFound); +} + +// --------------------------------------------------------------------------- +// Test Select entries sorted by name alphabetically. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesSortByName() +{ + __UHEAP_MARK; + { + TInt entriesACount(0); + QMap comparisonAResults; + TInt entriesBCount(0); + QMap comparisonBResults; + bool orderCheckPassed(false); + + TRAPD(err, + // test ascending + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetSort(CCaInnerQuery::Name); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + mStorage->GetEntriesL(innerQuery,resultArray); + + // change all odd entries texts to be lower case + for (TInt i = 0; i < resultArray.Count(); ++i) { + if (resultArray[i]->GetId() % 2 == 1) { + RBuf tempBuf; + tempBuf.CleanupClosePushL(); + tempBuf.CreateL(resultArray[i]->GetText()); + tempBuf.LowerCase(); + resultArray[i]->SetTextL(tempBuf); + CleanupStack::PopAndDestroy(&tempBuf); + mStorage->AddL(resultArray[i]); + } + } + // fetch the table again + resultArray.ResetAndDestroy(); + mStorage->GetEntriesL(innerQuery,resultArray); + + entriesACount = resultArray.Count(); + + RBuf previousText; + previousText.CleanupClosePushL(); + RBuf currentText; + currentText.CleanupClosePushL(); + if (!err) { + for (TInt i = 0; i < resultArray.Count(); i++) { + currentText.CreateL(resultArray[i]->GetText()); + currentText.LowerCase(); + + comparisonAResults[descToQString(currentText)] = true; + + if (i!=0 && currentText.Compare(previousText) < 0) { + comparisonAResults[descToQString(currentText)] = false; + err = KErrWrongData; + break; + } + currentText.Close(); + previousText.Close(); + previousText.CreateL(resultArray[i]->GetText()); + previousText.LowerCase(); + } + } + // test descending + CCaInnerQuery *innerQuery2 = CCaInnerQuery::NewLC(); + innerQuery2->SetSort(CCaInnerQuery::NameDesc); + RPointerArray resultArrayDesc; + CleanupResetAndDestroyPushL(resultArrayDesc); + mStorage->GetEntriesL(innerQuery2,resultArrayDesc); + + entriesBCount = resultArrayDesc.Count(); + + previousText.Close(); + currentText.Close(); + + if (!err) { + for (TInt i = 0; i < resultArrayDesc.Count(); i++) { + currentText.CreateL(resultArrayDesc[i]->GetText()); + currentText.LowerCase(); + + comparisonBResults[descToQString(currentText)] = true; + + if (i!=0 && resultArrayDesc[i]->GetText().Compare(previousText) > 0) { + comparisonBResults[descToQString(currentText)] = false; + break; + } + currentText.Close(); + previousText.Close(); + previousText.CreateL(resultArrayDesc[i]->GetText()); + previousText.LowerCase(); + } + } + + if (!err) { + orderCheckPassed = verifyOppositeOrder(resultArray, resultArrayDesc) == 0; + } + + CleanupStack::PopAndDestroy(&resultArrayDesc); + CleanupStack::PopAndDestroy(innerQuery2); + CleanupStack::PopAndDestroy(¤tText); + CleanupStack::PopAndDestroy(&previousText); + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + + QCOMPARE(err, KErrNone); + foreach(QString str, comparisonAResults.keys()) { + QVERIFY2(comparisonAResults[str], str.toUtf8()); + }; + QCOMPARE(comparisonAResults.size(), entriesACount); + + + foreach(QString str, comparisonAResults.keys()) { + QVERIFY2(comparisonBResults[str], str.toUtf8()); + }; + QCOMPARE(comparisonBResults.size(), entriesBCount); + + QVERIFY(orderCheckPassed); + } + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// tests getentries sorted by created timestamp ascending. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesSortByCreatedTimestamp() +{ + + __UHEAP_MARK; + { + QMap ascendingOrderCheckResults; + QMap descendingOrderCheckResults; + + TRAPD(err, + // check ascending + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetSort(CCaInnerQuery::CreatedTimestamp); + mStorage->GetEntriesL(innerQuery,resultArray); + CleanupStack::PopAndDestroy(innerQuery); + + TInt64 previousTimestamp(0); + for (TInt i = 0; i ids; + CleanupClosePushL(ids); + const TInt id = resultArray[i]->GetId(); + ids.AppendL(id); + innerQuery->SetIdsL(ids); + + TInt64 timestamp(0); + CCaSqlQuery *query = CCaSqlQuery::NewLC(STATIC_CAST(CCaSqLiteStorage *,mStorage)->iSqlDb); + query->SetQueryL(KSQLGetEntryTimestamp); + query->PrepareL(); + query->BindIdsL(ids, KSQLEntryId); + query->ExecuteL(timestamp); + + if (i != 0 && timestamp < previousTimestamp) { + ascendingOrderCheckResults[id] = false; + break; + } + previousTimestamp = timestamp; + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(&ids); + CleanupStack::PopAndDestroy(innerQuery); + } + + CleanupStack::PopAndDestroy(&resultArray); + + // check descending + CleanupResetAndDestroyPushL(resultArray); + innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetSort(CCaInnerQuery::CreatedTimestampDesc); + mStorage->GetEntriesL(innerQuery,resultArray); + CleanupStack::PopAndDestroy(innerQuery); + + previousTimestamp = 0; + for (TInt i = 0; i ids; + CleanupClosePushL(ids); + ids.AppendL(resultArray[i]->GetId()); + const TInt id = ids[0]; + innerQuery->SetIdsL(ids); + + TInt64 timestamp(0); + CCaSqlQuery *query = CCaSqlQuery::NewLC(STATIC_CAST(CCaSqLiteStorage *,mStorage)->iSqlDb); + query->SetQueryL(KSQLGetEntryTimestamp); + query->PrepareL(); + query->BindIdsL(ids, KSQLEntryId); + query->ExecuteL(timestamp); + if (i != 0 && timestamp > previousTimestamp) { + descendingOrderCheckResults[id] = false; + break; + } + previousTimestamp = timestamp; + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(&ids); + CleanupStack::PopAndDestroy(innerQuery); + } + + CleanupStack::PopAndDestroy(&resultArray); + ); + + + QCOMPARE(err, KErrNone); + QCOMPARE(ascendingOrderCheckResults.size(), 0); + QCOMPARE(descendingOrderCheckResults.size(), 0); + } + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// tests getentries sorted by used timestamp. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesSortByMostUsedTimestamp() +{ + __UHEAP_MARK; + + const TInt mostUsedIds[3] = {14, 9, 2}; + + const TInt mostUsedIdsSize = sizeof(mostUsedIds) / sizeof(TInt); + + TInt err(KErrNone); + + TRAP(err, + + for (TInt i = 0; i < mostUsedIdsSize; ++i) { + for (TInt j = mostUsedIdsSize - i; j >= 0; --j) { + mStorage->TouchL(mostUsedIds[i], ETrue); + } + } + + CCaInnerQuery *innerQuery1 = CCaInnerQuery::NewLC(); + innerQuery1->SetSort(CCaInnerQuery::MostUsedDesc); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + + // get entries - most used desscending + mStorage->GetEntriesL(innerQuery1, resultArray); + + if (resultArray.Count() < mostUsedIdsSize) { + err = KErrNotFound; +} else { + for (TInt i = 0; i < mostUsedIdsSize; ++i) { + if (resultArray[i]->GetId() != mostUsedIds[i]) { + err = KErrGeneral; + break; + } + } + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery1); + ); + + QCOMPARE(err, KErrNone); + + + TRAP(err, + CCaInnerQuery *innerQuery1 = CCaInnerQuery::NewLC(); + innerQuery1->SetSort(CCaInnerQuery::MostUsed); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + + // get entries - most used desscending + mStorage->GetEntriesL(innerQuery1, resultArray); + + const TInt resultCount = resultArray.Count(); + + if (resultCount < mostUsedIdsSize) { + err = KErrNotFound; +} else { + for (TInt i = 0; i < mostUsedIdsSize; ++i) { + if (resultArray[resultCount - i - 1]->GetId() != mostUsedIds[i]) { + err = KErrGeneral; + break; + } + } + } + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery1); + ); + __UHEAP_MARKEND; + + +} + + +// --------------------------------------------------------------------------- +// tests getentries sorted by used timestamp ascending. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesSortByLastUsedTimestamp() +{ + __UHEAP_MARK; + + const TInt lastUsedIds[3] = {14, 9, 2}; + + const TInt lastUsedIdsSize = sizeof(lastUsedIds) / sizeof(TInt); + + TInt err(KErrNone); + + TRAP(err, + + for (TInt i = lastUsedIdsSize - 1; i >= 0 ; --i) { + mStorage->TouchL(lastUsedIds[i], EFalse); + } + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetSort(CCaInnerQuery::LastUsedDesc); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + + // get entries - last used descending + mStorage->GetEntriesL(innerQuery, resultArray); + + + if (resultArray.Count() < lastUsedIdsSize) { + err = KErrNotFound; +} else { + for (TInt i = 0; i < lastUsedIdsSize; ++i) { + if (resultArray[i]->GetId() != lastUsedIds[i]) { + err = KErrGeneral; + break; + } + } + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + + + QCOMPARE(err, KErrNone); + + TRAP(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetSort(CCaInnerQuery::LastUsed); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + + // get entries - last used descending + mStorage->GetEntriesL(innerQuery, resultArray); + + const TInt resultCount = resultArray.Count(); + + if (resultCount < lastUsedIdsSize) { + err = KErrNotFound; +} else { + for (TInt i = 0; i < lastUsedIdsSize; ++i) { + if (resultArray[resultCount - 1 - i]->GetId() != + lastUsedIds[i]) { + err = KErrGeneral; + break; + } + } + } + + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// tests getentries sorted by default ascending. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesSortByDefault() +{ + + __UHEAP_MARK; + + TRAPD(err, + + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdEntryFromSpecificGroup); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEIdGroup), KAllCollectionsGroupId); + RArray resultHelpArray; + CleanupClosePushL(resultHelpArray); + query->ExecuteL(resultHelpArray, CCaSqlQuery::EEntryTable); + query->CloseStatement(); + + CCaInnerQuery *innerQuery1 = CCaInnerQuery::NewLC(); + innerQuery1->SetSort(CCaInnerQuery::Default); + innerQuery1->SetParentId(KAllCollectionsGroupId); + + CCaInnerQuery *innerQuery2 = CCaInnerQuery::NewLC(); + innerQuery2->SetSort(CCaInnerQuery::DefaultDesc); + innerQuery2->SetParentId(KAllCollectionsGroupId); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + // get entries - bu default from group + mStorage->GetEntriesL(innerQuery1, resultArray); + + // check results - compare Entry_Id + for (TInt i=0; iGetId() != resultHelpArray[i]) { + err = KErrWrongData; + } + } + + if (!err) { + err = testSortingBySortOrder(innerQuery1, innerQuery2); + } + + // clear after test + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery2); + CleanupStack::PopAndDestroy(innerQuery1); + CleanupStack::PopAndDestroy(&resultHelpArray); + CleanupStack::PopAndDestroy(query); + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + + +// --------------------------------------------------------------------------- +// tests getentries sorted by used timestamp ascending. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByFlags() +{ + + __UHEAP_MARK; + + TRAPD(err, + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); +// test all flags on in KMaxFlagsMask range + for (TUint flagsOnMask = 0; flagsOnMask <= KMaxFlagsMask; flagsOnMask++) { + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + innerQuery->SetFlagsOn(flagsOnMask); + mStorage->GetEntriesL(innerQuery,resultArray); + TInt entryCount = resultArray.Count(); + if (entryCount > 0) { + for (TInt j = 0; j < entryCount; j++) { + if (resultArray[j]->GetFlags() & flagsOnMask != flagsOnMask) { + err = KErrWrongData; + } + } + } + innerQuery->SetFlagsOn(0); + CleanupStack::PopAndDestroy(&resultArray); + } + +// test all flags off in KMaxFlagsMask range + for (TUint flagsOffMask = 0; flagsOffMask <= KMaxFlagsMask; flagsOffMask++) { + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + innerQuery->SetFlagsOff(flagsOffMask); + mStorage->GetEntriesL(innerQuery,resultArray); + TInt entryCount = resultArray.Count(); + if (entryCount > 0) { + for (TInt j = 0; j < entryCount; j++) { + if ((!resultArray[j]->GetFlags()) & flagsOffMask != flagsOffMask) { + err = KErrWrongData; + } + } + } + innerQuery->SetFlagsOff(0); + CleanupStack::PopAndDestroy(&resultArray); + } + +// test combination of flags on flags off + for (TUint flagsOnMask = 0; flagsOnMask <= KMaxFlagsMaskForCombinedTest; flagsOnMask++) { + for (TUint flagsOffMask = 0; flagsOffMask + <= KMaxFlagsMaskForCombinedTest; flagsOffMask++) { + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + innerQuery->SetFlagsOff(flagsOffMask); + innerQuery->SetFlagsOn(flagsOnMask); + mStorage->GetEntriesL(innerQuery,resultArray); + TInt entryCount = resultArray.Count(); + if (entryCount > 0) { + for (TInt j = 0; j < entryCount; j++) { + if ((!resultArray[j]->GetFlags()) & flagsOffMask != flagsOffMask + && resultArray[j]->GetFlags() & flagsOnMask != flagsOnMask) { + err = KErrWrongData; + } + } + } + innerQuery->SetFlagsOff(0); + innerQuery->SetFlagsOn(0); + CleanupStack::PopAndDestroy(&resultArray); + } + } + + CleanupStack::PopAndDestroy(innerQuery); + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// tests getentries with flags which are on +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByFlagsOn() +{ + + __UHEAP_MARK; + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + RPointerArray resultArrayTemp; + CleanupResetAndDestroyPushL(resultArrayTemp); + RArray testEntries; + CleanupClosePushL(testEntries); + + mStorage->GetEntriesL(innerQuery,resultArrayTemp); + + TInt entryCount = resultArrayTemp.Count(); + + // Change five random elements' flags + err = (entryCount >= 5) ? err : KErrNoData; + // Set all flags on to test flags on. + for (TInt i = 0; i < entryCount; i++) { + resultArrayTemp[i]->SetFlags(0); + mStorage->AddL(resultArrayTemp[i]); + } + + // get random entries to test on + TInt testIdCount(0); + while (testEntries.Count() < 5) { + TInt randomEntryInArray = Math::Random() % entryCount; + TBool exists(EFalse); + for (TInt i = 0; i < testEntries.Count(); i++) { + if (testEntries[i]== randomEntryInArray) { + exists = ETrue; + break; + } + } + if (!exists) { + testEntries.AppendL(randomEntryInArray); + } + } + + // test flags on with flags from KFlagsOnTable + + CCaInnerQuery *innerQueryFlagsOn = CCaInnerQuery::NewLC(); + for (TInt j = 0; j < 5; j++) { + // fill database with flag + for (TInt i = 0; i < 5; i++) { + TInt x = testEntries[i]; + resultArrayTemp[x]->SetFlags(KFlagsOnTable[j]); + mStorage->AddL(resultArrayTemp[x]); + } + + // check filled database + RPointerArray resultArrayFlagsOn; + CleanupResetAndDestroyPushL(resultArrayFlagsOn); + innerQueryFlagsOn->SetFlagsOn(KFlagsOnTable[j]); + mStorage->GetEntriesL(innerQueryFlagsOn,resultArrayFlagsOn); + TInt count = resultArrayFlagsOn.Count(); + err = (resultArrayFlagsOn.Count() >= 5) ? err : KErrWrongData; + + // check that the right entries were fetched + for (TInt i = 0; i < 5; i++) { + for (TInt j = 0; j < resultArrayFlagsOn.Count(); j++) { + if (resultArrayFlagsOn[j]->GetId() == + resultArrayTemp[testEntries[i]]->GetId()) { + break; + } else if (j == resultArrayFlagsOn.Count()-1) { + err = KErrWrongData; + } + } + } + + CleanupStack::PopAndDestroy(&resultArrayFlagsOn); + } + CleanupStack::PopAndDestroy(innerQueryFlagsOn); + CleanupStack::PopAndDestroy(&testEntries); + CleanupStack::PopAndDestroy(&resultArrayTemp); + CleanupStack::PopAndDestroy(innerQuery); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + + +// --------------------------------------------------------------------------- +// tests getentries with flags which are off +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByFlagsOff() +{ + __UHEAP_MARK; + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + RPointerArray resultArrayTemp; + CleanupResetAndDestroyPushL(resultArrayTemp); + RArray testEntries; + CleanupClosePushL(testEntries); + + mStorage->GetEntriesL(innerQuery,resultArrayTemp); + + TInt entryCount = resultArrayTemp.Count(); + + // Change five random elements' flags + err = (entryCount >= 5) ? err : KErrNoData; + // Set all flags off to test flags off assuming that there are 5 flags (63 bitwise) + for (TInt i = 0; i < entryCount; i++) { + resultArrayTemp[i]->SetFlags(63); + mStorage->AddL(resultArrayTemp[i]); + } + + // get random entries to test on + TInt testIdCount(0); + while (testEntries.Count() < 5) { + TInt randomEntryInArray = Math::Random() % entryCount; + TBool exists(EFalse); + for (TInt i = 0; i < testEntries.Count(); i++) { + if (testEntries[i]== randomEntryInArray) { + exists = ETrue; + break; + } + } + if (!exists) { + testEntries.AppendL(randomEntryInArray); + } + } + + // test flags on with flags from KFlagsOffTable + + CCaInnerQuery *innerQueryFlagsOff = CCaInnerQuery::NewLC(); + for (TInt j = 0; j < 5; j++) { + // fill database with flag + for (TInt i = 0; i < 5; i++) { + TInt x = testEntries[i]; + resultArrayTemp[x]->SetFlags(KFlagsOffTable[j]); + mStorage->AddL(resultArrayTemp[x]); + } + + // check filled database + RPointerArray resultArrayFlagsOff; + CleanupResetAndDestroyPushL(resultArrayFlagsOff); + innerQueryFlagsOff->SetFlagsOff(KFlagsOffTableMasks[j]); + mStorage->GetEntriesL(innerQueryFlagsOff,resultArrayFlagsOff); + TInt count = resultArrayFlagsOff.Count(); + err = (resultArrayFlagsOff.Count() >= 5) ? err : KErrWrongData; + + // check that the right entries were fetched + for (TInt i = 0; i < 5; i++) { + for (TInt j = 0; j < resultArrayFlagsOff.Count(); j++) { + if (resultArrayFlagsOff[j]->GetId() == + resultArrayTemp[testEntries[i]]->GetId()) { + break; + } else if (j == resultArrayFlagsOff.Count()-1) { + err = KErrWrongData; + } + } + } + + CleanupStack::PopAndDestroy(&resultArrayFlagsOff); + } + CleanupStack::PopAndDestroy(innerQueryFlagsOff); + CleanupStack::PopAndDestroy(&testEntries); + CleanupStack::PopAndDestroy(&resultArrayTemp); + CleanupStack::PopAndDestroy(innerQuery); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + + +// --------------------------------------------------------------------------- +// tests getentries by uid. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByUid() +{ + __UHEAP_MARK; + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetUid(KCalendarAppUid); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + mStorage->GetEntriesL(innerQuery,resultArray); + + TInt entryCount = resultArray.Count(); + + err = (entryCount == 1 && resultArray[0]->GetUid() == KCalendarAppUid) + ? err : KErrWrongData; + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// tests getentries by uid. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesIds() +{ + __UHEAP_MARK; + + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + RArray idArray; + CleanupClosePushL(idArray); + + mStorage->GetEntriesIdsL(innerQuery,idArray); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + mStorage->GetEntriesL(innerQuery,resultArray); + + err = (idArray.Count() > 0) ? err : KErrNoData; + if (!err) { + err = (idArray.Count() == resultArray.Count()) ? err : KErrWrongData; + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(&idArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetNewEntryWithAttributes() +{ + __UHEAP_MARK; + TInt err(KErrGeneral); + TRAP(err, + // Check database entries count + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt entriesCount(0); + query->ExecuteL(entriesCount); + CleanupStack::PopAndDestroy(query); + + + // add new entry with attributes + CCaInnerEntry *innerEntry = CCaInnerEntry::NewL(); + RPointerArray innerEntryArray; + CleanupResetAndDestroyPushL(innerEntryArray); + innerEntryArray.AppendL(innerEntry); + + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Item); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(&innerEntryArray); + + + // get new entry with attributes + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + RArray idArray; + CleanupClosePushL(idArray); + idArray.AppendL(entriesCount + 1); // new entry + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetIdsL(idArray); + + mStorage->GetEntriesL(innerQuery, resultArray); + + // check results + TInt attributesCount = resultArray[0]->GetAttributes().Count(); + + if (attributesCount == 3) { + err = KErrNone; +} else { + err = KErrGeneral; +} + +// clear after test +CleanupStack::PopAndDestroy(innerQuery); +CleanupStack::PopAndDestroy(&idArray); +CleanupStack::PopAndDestroy(&resultArray); + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetNewEntryWithAttributesByUid() +{ + __UHEAP_MARK; + + TInt err(KErrGeneral); + + TRAP(err, + // add new entry with attributes + CCaInnerEntry *innerEntry = CCaInnerEntry::NewL(); + RPointerArray innerEntryArray; + CleanupResetAndDestroyPushL(innerEntryArray); + innerEntryArray.AppendL(innerEntry); + + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName2); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Item); + innerEntry->SetUid(KTestAppUid); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + CleanupStack::PopAndDestroy(&innerEntryArray); + + + // get new entry with attributes by uid + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetUid(KTestAppUid); + + mStorage->GetEntriesL(innerQuery, resultArray); + + // check results + TInt attributesCount = resultArray[0]->GetAttributes().Count(); + + if (attributesCount == 3) { + err = KErrNone; +} else { + err = KErrGeneral; +} + +// clear after test +CleanupStack::PopAndDestroy(innerQuery); +CleanupStack::PopAndDestroy(&resultArray); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// Test Select entries with limit. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesWhenLimitSetTo() +{ + + + QList entryCountList; + entryCountList << 5 << -15 << 0 << 50; + __UHEAP_MARK; + + int limit(0); + foreach(limit, entryCountList) { + // Check database entries count + TRAPD(err, + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt entriesCount(0); + query->ExecuteL(entriesCount); + CleanupStack::PopAndDestroy(query); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + + innerQuery->SetCount(limit); + + // limit is set to stif parser param + mStorage->GetEntriesL(innerQuery, resultArray); + + + // check results + if ((0 < limit) && (limit <= entriesCount)) { + if (resultArray.Count() == innerQuery->GetCount()) { + err = KErrNone; + } else { + err = KErrGeneral; + } + } else { + if (resultArray.Count() == entriesCount) { + err = KErrNone; + } else { + err = KErrGeneral; + } + } + + // clear after test + CleanupStack::PopAndDestroy(innerQuery); + CleanupStack::PopAndDestroy(&resultArray); + ); + // limit added to make easier to identify where failure occured + QCOMPARE(err + limit, KErrNone + limit); + } + __UHEAP_MARKEND; +} + +// --------------------------------------------------------------------------- +// Test Select entries by role. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByRole() +{ + + + __UHEAP_MARK; + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + + RPointerArray resultArrayGroups; + CleanupResetAndDestroyPushL(resultArrayGroups); + innerQuery->SetRole(CCaInnerQuery::Group); + mStorage->GetEntriesL(innerQuery, resultArrayGroups); + TInt groupsCount = resultArrayGroups.Count(); + CleanupStack::PopAndDestroy(&resultArrayGroups); + + RPointerArray resultArrayItems; + CleanupResetAndDestroyPushL(resultArrayItems); + innerQuery->SetRole(CCaInnerQuery::Item); + mStorage->GetEntriesL(innerQuery, resultArrayItems); + TInt itemsCount = resultArrayItems.Count(); +// changes the role of two items to be groups + + resultArrayItems[0]->SetRole(CCaInnerQuery::Group); + resultArrayItems[1]->SetRole(CCaInnerQuery::Group); + TInt entry1Id = resultArrayItems[0]->GetId(); + TInt entry2Id = resultArrayItems[1]->GetId(); + mStorage->AddL(resultArrayItems[0]); + mStorage->AddL(resultArrayItems[1]); + CleanupStack::PopAndDestroy(&resultArrayItems); + + RPointerArray resultArrayGroups2; + CleanupResetAndDestroyPushL(resultArrayGroups2); + innerQuery->SetRole(CCaInnerQuery::Group); + mStorage->GetEntriesL(innerQuery, resultArrayGroups2); + TInt groupsCountAfterModifyRole = resultArrayGroups2.Count(); + err = (groupsCountAfterModifyRole == groupsCount + 2)? err : KErrWrongData; + +// Check that entry 1 is now group + for (TInt i = 0; i < groupsCountAfterModifyRole; i++) { + if (resultArrayGroups2[i]->GetId() == entry1Id) { + break; + } else if (i == groupsCountAfterModifyRole - 1) { + err = KErrWrongData; + } + } + +// Check that entry 2 is now group + for (TInt i = 0; i < groupsCountAfterModifyRole; i++) { + if (resultArrayGroups2[i]->GetId() == entry2Id) { + break; + } else if (i == groupsCountAfterModifyRole - 1) { + err = KErrWrongData; + } + } + + CleanupStack::PopAndDestroy(&resultArrayGroups2); + + RPointerArray resultArrayItems2; + CleanupResetAndDestroyPushL(resultArrayItems2); + innerQuery->SetRole(CCaInnerQuery::Item); + mStorage->GetEntriesL(innerQuery, resultArrayItems2); + TInt itemsCountAfterModifyRole = resultArrayItems2.Count(); + err = (itemsCountAfterModifyRole == itemsCount - 2)? err : KErrWrongData; + CleanupStack::PopAndDestroy(&resultArrayItems2); + + CleanupStack::PopAndDestroy(innerQuery); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testGetEntriesByAttributes() +{ + __UHEAP_MARK; + int uid; + TInt attributesCount; + TInt attributesCountFromQuery; + TRAPD(err, + + // add new entry with attributes + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName2); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Item); + innerEntry->SetUid(KTestAppUid); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->AddAttributeL(KAttrName_2, KAttrValue_2); + innerQuery->AddAttributeL(KAttrName_3, KAttrValue_3); + attributesCountFromQuery = innerQuery->GetAttributes().Count(); + + // get entries by attributes + RPointerArray resultArrayItems; + CleanupResetAndDestroyPushL(resultArrayItems); + mStorage->GetEntriesL(innerQuery, resultArrayItems); + + if( resultArrayItems.Count() ) + { + uid = resultArrayItems[0]->GetUid(); + attributesCount = resultArrayItems[0]->GetAttributes().Count(); + } + + CleanupStack::PopAndDestroy(&resultArrayItems); + CleanupStack::PopAndDestroy(innerQuery); + CleanupStack::PopAndDestroy(innerEntry); + ); + __UHEAP_MARKEND; + + QCOMPARE(uid, KTestAppUid); + QCOMPARE((attributesCount-1), attributesCountFromQuery); + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testGetEntriesByAttributes2() +{ + __UHEAP_MARK; + int getEntriesCount; + TRAPD(err, + + // add new entry with attributes + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + + innerEntry->SetTextL(KTestName); + innerEntry->SetEntryTypeNameL(KTypeName2); + innerEntry->SetFlags(flag); + innerEntry->SetRole(CCaInnerQuery::Item); + innerEntry->SetUid(KTestAppUid); + innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321")); + + innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2); + innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3); + + mStorage->AddL(innerEntry); + + // add new entry with attributes + CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC(); + + innerEntry2->SetTextL(KTestName2); + innerEntry2->SetEntryTypeNameL(KTypeName2); + innerEntry2->SetFlags(flag); + innerEntry2->SetRole(CCaInnerQuery::Item); + innerEntry2->SetUid(KTestAppUid2); + + // add new entry with attributes + innerEntry2->AddAttributeL(KAttrName_1, KAttrValue_1); + innerEntry2->AddAttributeL(KAttrName_2, KAttrValue_2); + + mStorage->AddL(innerEntry2); + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->AddAttributeL(KAttrName_1, KAttrValue_1); + innerQuery->AddAttributeL(KAttrName_2, KAttrValue_2); + + // get entries by attributes + RPointerArray resultArrayItems; + CleanupResetAndDestroyPushL(resultArrayItems); + mStorage->GetEntriesL(innerQuery, resultArrayItems); + + TInt attributesCount = resultArrayItems[0]->GetAttributes().Count(); + getEntriesCount = resultArrayItems.Count(); + + CleanupStack::PopAndDestroy(&resultArrayItems); + CleanupStack::PopAndDestroy(innerQuery); + CleanupStack::PopAndDestroy(innerEntry2); + CleanupStack::PopAndDestroy(innerEntry); + ); + __UHEAP_MARKEND; + + QCOMPARE(getEntriesCount, 2); + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// Test Select entries by child id. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetEntriesByChildId() +{ + TInt expectedGroupEntryCount(0); + TInt actualGroupEntryCount(0); + + __UHEAP_MARK; + + TRAPD(err, + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + + // check before test entries count in sfecific group + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetEntriesCountAsParentsForSpecificEntry); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEEntryId), 7); + + query->ExecuteL(expectedGroupEntryCount); + + CleanupStack::PopAndDestroy(query); + + innerQuery->SetChildId(7); + + // get entries from specific group + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + + mStorage->GetEntriesL(innerQuery, resultArray); + + actualGroupEntryCount = resultArray.Count(); + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); + QCOMPARE(actualGroupEntryCount, expectedGroupEntryCount); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestgetparentids.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestgetparentids.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,87 @@ +/* +* 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: +* +*/ +/* + * castoragetestgetparentids.cpp + * + * Created on: 2009-09-14 + * Author: michal.czerwiec + */ + +#include "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "cainnerentry.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "castoragetestsqlcommands.h" +#include "casqlcommands.h" + +// --------------------------------------------------------------------------- +// Test Sorting Order giving different attributes. +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testGetParentIds() +{ + __UHEAP_MARK; + + TRAPD(err, + RArray entryIdArray; + CleanupClosePushL(entryIdArray); + entryIdArray.AppendL(15); + RArray parentIdArray; + CleanupClosePushL(parentIdArray); + //TInt err(KErrNone); + mStorage->GetParentsIdsL(entryIdArray, parentIdArray); + if (parentIdArray.Count() != 3) { + err == KErrNotFound; +} else if (parentIdArray.Find(2) == KErrNotFound || + parentIdArray.Find(3) == KErrNotFound || + parentIdArray.Find(8) == KErrNotFound) { + err = KErrGeneral; +} + +CleanupStack::PopAndDestroy(&parentIdArray); +CleanupStack::PopAndDestroy(&entryIdArray); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testGetParentIdsInLoop() +{ + __UHEAP_MARK; + TRAPD(err, + RArray entryIdArray; + CleanupClosePushL(entryIdArray); + entryIdArray.AppendL(9); + RArray parentIdArray; + CleanupClosePushL(parentIdArray); + //TInt err(KErrNone); + mStorage->GetParentsIdsL(entryIdArray, parentIdArray); + if (parentIdArray.Count() != 4) { + err == KErrNotFound; +} + +CleanupStack::PopAndDestroy(&parentIdArray); +CleanupStack::PopAndDestroy(&entryIdArray); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestlocalization.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestlocalization.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,244 @@ +/* +* 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: +* +*/ +/* + * castoragetestlocalization.cpp + * + * Created on: Dec 2, 2009 + * Author: michal.wojcik + */ + + +#include "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "caarraycleanup.inl" +#include "cainnerentry.h" +#include "calocalizationentry.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "castoragetestsqlcommands.h" +#include "casqlcommands.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testRemoveFromLocalizationAfterNameChange() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + // Check before test + CCaSqlQuery *query = CCaSqlQuery::NewL(((CCaSqLiteStorage *)mStorage)->iSqlDb); + CleanupStack::PushL(query); + query->SetQueryL(KSQLCountFromLocalizationTable); + query->PrepareL(); + TInt countLocalizationBefore(0); + query->ExecuteL(countLocalizationBefore); + CleanupStack::PopAndDestroy(query); + + // Update Collection Name; + // CCaInnerEntry* innerEntry = CCaInnerEntry::NewLC(); + // innerEntry->SetId( 5 ); + // innerEntry->SetTextL( KTestName ); + // mStorage->AddL( innerEntry ); + // CleanupStack::PopAndDestroy( innerEntry ); + + mStorage->RemoveFromLocalizationL(5); + + + // Check result after name entry name update + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLCountFromLocalizationTable); + query->PrepareL(); + TInt countLocalizationAfter(0); + query->ExecuteL(countLocalizationAfter); + CleanupStack::PopAndDestroy(query); + if ((countLocalizationBefore - countLocalizationAfter) == 1) { + err = KErrNone; +} + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testGetLocalizations() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + // Check before test + CCaSqlQuery *query = CCaSqlQuery::NewL(((CCaSqLiteStorage *)mStorage)->iSqlDb); + CleanupStack::PushL(query); + query->SetQueryL(KSQLCountFromLocalizationTable); + query->PrepareL(); + TInt countLocalization(0); + query->ExecuteL(countLocalization); + CleanupStack::PopAndDestroy(query); + + // Get Localizations from db + RPointerArray resultContainer; + CleanupResetAndDestroyPushL(resultContainer); + mStorage->GetLocalizationsL(resultContainer); + + if (resultContainer.Count() == countLocalization) { + err = KErrNone; + } + + CleanupStack::PopAndDestroy(&resultContainer); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testLocalizeEntry() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + CCaLocalizationEntry *localizationEntry = CCaLocalizationEntry::NewLC(); + + const TInt KOfficeId = 5; + + _LIT(KAttributeName, "EN_TEXT"); + localizationEntry->SetAttributeNameL(KAttributeName); + _LIT(KNewLocalizedString, "Biurowe smietnisko"); + localizationEntry->SetLocalizedStringL(KNewLocalizedString); + localizationEntry->SetRowId(KOfficeId); // office + _LIT(KTableName, "CA_ENTRY"); + localizationEntry->SetTableNameL(KTableName); + localizationEntry->SetTextId(KOfficeId); // office + + // test localize entry + mStorage->LocalizeEntryL(*localizationEntry); + + // get this entry from db - office + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + RArray idArray; + CleanupClosePushL(idArray); + idArray.AppendL(KOfficeId); + innerQuery->SetIdsL(idArray); + + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + mStorage->GetEntriesL(innerQuery, resultArray); + + // check results + if (!resultArray[0]->GetText().CompareC(KNewLocalizedString)) { + err = KErrNone; +} + +CleanupStack::PopAndDestroy(&resultArray); +CleanupStack::PopAndDestroy(&idArray); +CleanupStack::PopAndDestroy(innerQuery); + +CleanupStack::PopAndDestroy(localizationEntry); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + + +//------------------------------------------------------------------------- +void CCAStorageTest::testAddLocalizationEntry() +{ + TInt err(KErrGeneral); + TInt countLocalization1(0); + TInt countLocalization2(0); + + __UHEAP_MARK; + TRAP(err, + // Check before test + + countLocalization1 = locEntriesCount(); + // Get Localizations from db + CCaLocalizationEntry* locEntry = CCaLocalizationEntry::NewLC(); + locEntry->SetTableNameL(_L("TestTable")); + locEntry->SetAttributeNameL(_L("TestAttName")); + locEntry->SetStringIdL(_L("TestStrId")); + locEntry->SetQmFilenameL(_L("TestQmFilename")); + locEntry->SetRowId(6667); + mStorage->AddLocalizationL(*locEntry); + countLocalization2 =locEntriesCount(); + CleanupStack::PopAndDestroy(locEntry); + + ); + QCOMPARE(err, KErrNone); + QCOMPARE(countLocalization1+1 , countLocalization2); + + __UHEAP_MARKEND; + +} + +//------------------------------------------------------------------------- +void CCAStorageTest::testUpdateLocalizationEntry() +{ + TInt err(KErrGeneral); + TInt countLocalization1(0); + TInt countLocalization2(0); + + __UHEAP_MARK; + TRAP(err, + // Get Localizations from db + CCaLocalizationEntry* locEntry = CCaLocalizationEntry::NewLC(); + locEntry->SetTableNameL(_L("TestTable")); + locEntry->SetAttributeNameL(_L("TestAttName")); + locEntry->SetStringIdL(_L("TestStrId")); + locEntry->SetQmFilenameL(_L("TestQmFilename")); + locEntry->SetRowId(6668); + mStorage->AddLocalizationL(*locEntry); + + countLocalization1 = locEntriesCount(); + + locEntry->SetTableNameL(_L("TestTable")); + locEntry->SetAttributeNameL(_L("TestAttName")); + locEntry->SetStringIdL(_L("TestStrId2")); + locEntry->SetQmFilenameL(_L("TestQmFilename2")); + locEntry->SetRowId(6668); + mStorage->AddLocalizationL(*locEntry); + + countLocalization2 = locEntriesCount(); + + CleanupStack::PopAndDestroy(locEntry); + + ); + QCOMPARE(err, KErrNone); + QCOMPARE(countLocalization1 , countLocalization2); + + __UHEAP_MARKEND; + +} +//------------------------------------------------------------------------- +TInt CCAStorageTest::locEntriesCount() +{ + TInt count(0); + CCaSqlQuery *query = CCaSqlQuery::NewL(((CCaSqLiteStorage *)mStorage)->iSqlDb); + CleanupStack::PushL(query); + query->SetQueryL(KSQLCountFromLocalizationTable); + query->PrepareL(); + query->ExecuteL(count); + CleanupStack::PopAndDestroy(query); + return count; +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestorganize.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestorganize.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,366 @@ +/* +* 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: +* +*/ +/* + * castoragetestorganize.cpp + * + * Created on: 2009-08-14 + * Author: maciej.walczynski + */ + +#include "castoragetest.h" +#include "caoperationparams.h" +#include "castorage.h" +#include "caarraycleanup.inl" +#include "castoragetestsqlcommands.h" +#include "casqlcommands.h" +#include "cainnerentry.h" +#include "casqlitestorage.h" +#include "casqlquery.h" + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testOrganizeRemove() +{ + TInt err(KErrNone); + + __UHEAP_MARK; + TRAP(err, + RArray entryIds; + CleanupClosePushL(entryIds); + entryIds.AppendL(15); + entryIds.AppendL(16); + + TCaOperationParams organizeParams; + organizeParams.iGroupId = 12; + organizeParams.iOperationType = TCaOperationParams::ERemove; + mStorage->OrganizeL(entryIds, organizeParams); + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetParentId(12); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + mStorage->GetEntriesL(innerQuery, resultArray); + + // Check that entries with ids 15 and 16 are not in group 12 + for (TInt j = 0; j < entryIds.Count(); j++) { + for (TInt i = 0; i < resultArray.Count(); i++) { + if (resultArray[i]->GetId() == entryIds[j]) { + err = KErrWrongData; + break; + } + } + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + CleanupStack::PopAndDestroy(&entryIds); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testOrganizeAppend() +{ + TInt err(KErrNone); + + __UHEAP_MARK; + TRAP(err, + RArray entryIds; + CleanupClosePushL(entryIds); + entryIds.AppendL(8); + entryIds.AppendL(7); + + TCaOperationParams organizeParams; + organizeParams.iGroupId = 3; + organizeParams.iOperationType = TCaOperationParams::EAppend; + mStorage->OrganizeL(entryIds,organizeParams); + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetParentId(3); + innerQuery->SetSort(CCaInnerQuery::Default); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + mStorage->GetEntriesL(innerQuery, resultArray); + + TInt j = resultArray.Count() - 1; + for (TInt i = entryIds.Count() - 1; i >= 0; i--, j--) { + if (resultArray[j]->GetId() != entryIds[i]) { + err = KErrWrongData; + } + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + CleanupStack::PopAndDestroy(&entryIds); + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testOrganizePrepend() +{ + TInt err(KErrNone); + + __UHEAP_MARK; + TRAP(err, + RArray entryIds; + CleanupClosePushL(entryIds); + entryIds.AppendL(8); + entryIds.AppendL(7); + + TCaOperationParams organizeParams; + organizeParams.iGroupId = 3; + organizeParams.iOperationType = TCaOperationParams::EPrepend; + mStorage->OrganizeL(entryIds,organizeParams); + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetParentId(3); + innerQuery->SetSort(CCaInnerQuery::Default); + RPointerArray resultArray; + CleanupResetAndDestroyPushL(resultArray); + mStorage->GetEntriesL(innerQuery, resultArray); + + TInt j = 0; + for (TInt i = 0; i < entryIds.Count(); i++, j++) { + if (resultArray[j]->GetId() != entryIds[i]) { + err = KErrWrongData; + } + } + + CleanupStack::PopAndDestroy(&resultArray); + CleanupStack::PopAndDestroy(innerQuery); + CleanupStack::PopAndDestroy(&entryIds); + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testOrganizeInsertNewIntoGroup() +{ + TInt err(KErrNone); + + __UHEAP_MARK; + TRAP(err, + //insert somewhere in the middle + RArray entryIds; + CleanupClosePushL(entryIds); + TInt newInsertEntryId = 7; + + entryIds.AppendL(newInsertEntryId); + + CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC(); + innerQuery->SetParentId(2); + innerQuery->SetSort(CCaInnerQuery::Default); + + RPointerArray resultArray1; + CleanupResetAndDestroyPushL(resultArray1); + mStorage->GetEntriesL(innerQuery, resultArray1); + + TInt count = resultArray1.Count(); + TInt insertPosition = count / 2; + TInt beforeId = resultArray1[insertPosition - 1]->GetId(); + + TCaOperationParams organizeParams; + organizeParams.iGroupId = 2; + organizeParams.iBeforeEntryId = beforeId; + organizeParams.iOperationType = TCaOperationParams::EInsert; + mStorage->OrganizeL(entryIds,organizeParams); + + RPointerArray resultArray2; + CleanupResetAndDestroyPushL(resultArray2); + mStorage->GetEntriesL(innerQuery, resultArray2); + + TInt idNew = resultArray2[ insertPosition - 1 ]->GetId(); + err = (resultArray2[ insertPosition - 1 ]->GetId() == newInsertEntryId) ? err : KErrWrongData; + err = (resultArray2[ insertPosition ]->GetId() == beforeId) ? err : KErrWrongData; + + //insert into 1st position (prepend) + + CCaSqLiteStorage *storage = STATIC_CAST(CCaSqLiteStorage *,mStorage); + CCaSqlQuery *query = CCaSqlQuery::NewLC(storage->iSqlDb); + query->SetQueryL(KSQLGetUnexistingIdFromGroup); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEIdGroup), KAllCollectionsGroupId); + TInt unexistingIdInGroup; + query->ExecuteL(unexistingIdInGroup); + query->CloseStatement(); + entryIds.Reset(); + entryIds.AppendL(unexistingIdInGroup); + TInt idFirst = resultArray2[ 0 ]->GetId(); + organizeParams.iBeforeEntryId = idFirst; + mStorage->OrganizeL(entryIds,organizeParams); + + RPointerArray resultArray3; + CleanupResetAndDestroyPushL(resultArray3); + mStorage->GetEntriesL(innerQuery, resultArray3); + + err = (resultArray3[ 0 ]->GetId() == unexistingIdInGroup) ? err : KErrWrongData; + + //insert before unexisting item + TInt unexistingIdInGroup1; + TInt unexistingIdInGroup2; + query->SetQueryL(KSQLGetUnexistingIdFromGroup); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEIdGroup), KAllCollectionsGroupId); + query->ExecuteL(unexistingIdInGroup1); + unexistingIdInGroup2 = unexistingIdInGroup1 + 1; + query->CloseStatement(); + organizeParams.iBeforeEntryId = unexistingIdInGroup1; + entryIds.Reset(); + entryIds.AppendL(unexistingIdInGroup2); + + TInt unexistingBeforeIdError(KErrNone); + TRAP(unexistingBeforeIdError, mStorage->OrganizeL(entryIds,organizeParams)); + if (KErrNone == unexistingBeforeIdError) { + err = KErrBadParams; +} + +CleanupStack::PopAndDestroy(&resultArray3); +CleanupStack::PopAndDestroy(query); +CleanupStack::PopAndDestroy(&resultArray2); +CleanupStack::PopAndDestroy(&resultArray1); +CleanupStack::PopAndDestroy(innerQuery); +CleanupStack::PopAndDestroy(&entryIds); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testOrganizeBadParams() +{ + TInt err(KErrNone); + __UHEAP_MARK; + TRAP(err, + RArray errorArray; + CleanupClosePushL(errorArray); + RArray entryIds; + CleanupClosePushL(entryIds); + TCaOperationParams organizeParams; + CCaSqLiteStorage *storage = STATIC_CAST(CCaSqLiteStorage *,mStorage); + CCaSqlQuery *query = CCaSqlQuery::NewLC(storage->iSqlDb); + + query->SetQueryL(KSQLGetUnexistingIdFromGroup); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEIdGroup), KAllCollectionsGroupId); + TInt unexistingIdInGroup; + query->ExecuteL(unexistingIdInGroup); + query->CloseStatement(); + organizeParams.iOperationType = TCaOperationParams::ERemove; + entryIds.Append(unexistingIdInGroup); + entryIds.Append(unexistingIdInGroup + 1); + TRAP(err, mStorage->OrganizeL(entryIds,organizeParams)); + errorArray.AppendL(err); + err = KErrNone; + entryIds.Reset(); + + organizeParams.iOperationType = TCaOperationParams::EInsert; + organizeParams.iBeforeEntryId = unexistingIdInGroup; + entryIds.Append(unexistingIdInGroup + 1); + TRAP(err, mStorage->OrganizeL(entryIds,organizeParams)); + errorArray.AppendL(err); + err = KErrNone; + + for (TInt i = 0; i < errorArray.Count(); i++) { + if (errorArray[i] == 0) { + err = KErrBadParams; + break; + } + } + + CleanupStack::PopAndDestroy(query); + CleanupStack::PopAndDestroy(&entryIds); + CleanupStack::PopAndDestroy(&errorArray); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testCustomSort() +{ + TInt err(KErrNone); + __UHEAP_MARK; + TRAP(err, + const TInt KGroupId = 12; + + RArray entryIds; + CleanupClosePushL(entryIds); + RArray entryIdsFromDb; + CleanupClosePushL(entryIdsFromDb); + + // array with custom sorted ids + entryIds.AppendL(14); // 13 + entryIds.AppendL(15); // 14 + entryIds.AppendL(13); // 15 + entryIds.AppendL(16); // 16 + entryIds.AppendL(17); // 17 + + // test + mStorage->CustomSortL(entryIds, KGroupId); + + // check results + CCaSqLiteStorage *storage = STATIC_CAST(CCaSqLiteStorage *, mStorage); + CCaSqlQuery *query = CCaSqlQuery::NewLC(storage->iSqlDb); + query->SetQueryL(KSQLGetEntryIdsFromGroupInPositionOrder); + query->PrepareL(); + query->BindIntL(query->iStatement.ParameterIndex(KSQLGEIdGroup), KGroupId); + TInt count = query->ExecuteL(entryIdsFromDb, CCaSqlQuery::EGroupTable); + query->CloseStatement(); + + for (TInt i=0; iSetDBPropertyL(KProperty, KPropertyValue); + + TBuf<20> propertyValue; + mStorage->DbPropertyL(KProperty, propertyValue); + + if (!propertyValue.CompareC(KPropertyValue)) { + err = KErrNone; +} + +// set db version property - 00002 +mStorage->SetDBPropertyL(KProperty, KPropertyValue2); + +TBuf<20> propertyValue2; +mStorage->DbPropertyL(KProperty, propertyValue2); + +// check results +if (err == KErrNone) { + if (!propertyValue2.CompareC(KPropertyValue2)) { + err = KErrNone; + } else { + err = KErrGeneral; + } + } + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testPropertyGetLanguage() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + + _LIT(KProperty, "Language"); + _LIT(KPropertyValue, "en_GB"); + _LIT(KPropertyValue2, "pl_PL"); + + TRAP(err, + // set lanquage property - en_GB + mStorage->SetDBPropertyL(KProperty, KPropertyValue); + + TBuf<20> propertyValue; + mStorage->DbPropertyL(KProperty, propertyValue); + + if (!propertyValue.CompareC(KPropertyValue)) { + err = KErrNone; +} + +// set lanquage property - pl_PL +mStorage->SetDBPropertyL(KProperty, KPropertyValue2); + +TBuf<20> propertyValue2; +mStorage->DbPropertyL(KProperty, propertyValue2); + +// check results +if (err == KErrNone) { + if (!propertyValue2.CompareC(KPropertyValue2)) { + err = KErrNone; + } else { + err = KErrGeneral; + } + } + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testLoadDBFromROM() +{ + TInt err(KErrGeneral); + + delete mStorage; + mStorage = NULL; + + //we copy corrupted db + QFile corruptedfile("c:/testing/data/t_castorage/corruptedcastoragedb"); + QFile file("c:/castorage.db"); + bool ok = corruptedfile.open(QIODevice::ReadOnly); + ok = file.open(QIODevice::ReadWrite) && ok; + ok = file.remove() && ok; + ok = corruptedfile.copy("c:/castorage.db") && ok; + QCOMPARE(ok, true); + + corruptedfile.close(); + file.close(); + + TRAP(err, + mStorage = CaStorageFactory::NewDatabaseL(); + ); + + + CCaSqLiteStorage *storage = dynamic_cast(mStorage); + storage->iPrivatePathZDriveDb.Copy(_L("c:\\testing\\data\\t_castorage\\castorage.db")); + TRAP(err, + mStorage->LoadDataBaseFromRomL(); + ); + QCOMPARE(err, KErrNone); + testGetEntriesById();// to check that db is accesible +} + +// not stable to use due to impossibilty to dynamically load db to rom +/*void CCAStorageTest::testBadDBVersion() +{ + TInt err(KErrGeneral); + + delete mStorage; + mStorage = NULL; + + //we copy db with bad version db + QFile badversionfile("c:/testing/data/t_castorage/versioncastoragedb"); + QFile file("c:/castorage.db"); + bool ok = badversionfile.open(QIODevice::ReadOnly); + ok = file.open(QIODevice::ReadWrite) && ok; + ok = file.remove() && ok; + ok = badversionfile.copy("c:/castorage.db") && ok; + QCOMPARE(ok, true); + badversionfile.close(); + file.close(); + + //we would like to copy good db to rom + //but we can only assume that it is already there + QFile goodversionfile("c:/testing/data/t_castorage/castorage.db"); + QFile file2("z:/castorage.db"); + ok = goodversionfile.open(QIODevice::ReadOnly); + ok = file2.open(QIODevice::ReadWrite) && ok; + ok = file2.remove() && ok; + ok = goodversionfile.copy("z:/castorage.db") && ok; + QCOMPARE(ok, true); + badversionfile.close(); + file2.close(); + + + TRAP(err, + mStorage = CaStorageFactory::NewDatabaseL(); + ); + + //check id good version was loaded instead + CCaSqLiteStorage* castorage = dynamic_cast(mStorage); + TBuf versionValue; + castorage->DbPropertyL(KCaDbPropVersion, versionValue); + TInt res = versionValue.CompareC( KCaDbVersion ); + QVERIFY(res == 0); +}*/ + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetestremove.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestremove.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,353 @@ +/* +* 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: +* +*/ +/* + * castoragetestremove.cpp + * + * Created on: 2009-08-05 + * Author: michal.czerwiec + */ + +#include "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "cainnerentry.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "castoragetestsqlcommands.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testRemoveOneEntryWithIcon() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; +// TRAP(err, + // Check database before remove + CCaSqlQuery *query = CCaSqlQuery::NewL(((CCaSqLiteStorage *)mStorage)->iSqlDb); + CleanupStack::PushL(query); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesBeforeRemove(0); + query->ExecuteL(countEntriesBeforeRemove); + CleanupStack::PopAndDestroy(query); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + TInt countIconsBeforeRemove(0); + query->ExecuteL(countIconsBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // Remove from database + RArray entriesToRemoveArray; + CleanupClosePushL(entriesToRemoveArray); + // etry with id = 3 has icon + TInt entryId = 3; + entriesToRemoveArray.AppendL(entryId); + mStorage->RemoveL(entriesToRemoveArray); + + + // Check result after remove + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesAfterRemove(0); + query->ExecuteL(countEntriesAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countEntriesBeforeRemove - countEntriesAfterRemove) == entriesToRemoveArray.Count()) { + err = KErrNone; + } + +query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); +query->SetQueryL(KSQLGetIdCountFromIconTable); +query->PrepareL(); +TInt countIconsAfterRemove(0); +query->ExecuteL(countIconsAfterRemove); +CleanupStack::PopAndDestroy(query); + +if (!err) { + if ((countIconsBeforeRemove - countIconsAfterRemove) == 1) { + err = KErrNone; + } else { + err = KErrGeneral; + } + } + + CleanupStack::PopAndDestroy(&entriesToRemoveArray); +// ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemoveOneEntryWhenIconIsUseByOtherEntry() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; + TRAP(err, + // Check database before remove + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesBeforeRemove(0); + query->ExecuteL(countEntriesBeforeRemove); + CleanupStack::PopAndDestroy(query); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + TInt countIconsBeforeRemove(0); + query->ExecuteL(countIconsBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // Remove from database + RArray entriesToRemoveArray; + CleanupClosePushL(entriesToRemoveArray); + // etry with id = 20 has same icon as entry with id = 21 + entriesToRemoveArray.AppendL(20); + mStorage->RemoveL(entriesToRemoveArray); + + + // Check result after remove + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesAfterRemove(0); + query->ExecuteL(countEntriesAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countEntriesBeforeRemove - countEntriesAfterRemove) == entriesToRemoveArray.Count()) { + err = KErrNone; +} + +query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); +query->SetQueryL(KSQLGetIdCountFromIconTable); +query->PrepareL(); +TInt countIconsAfterRemove(0); +query->ExecuteL(countIconsAfterRemove); +CleanupStack::PopAndDestroy(query); + +if (countIconsBeforeRemove == countIconsAfterRemove) { + err = KErrNone; +} else { + err = KErrGeneral; +} + +CleanupStack::PopAndDestroy(&entriesToRemoveArray); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemoveTwoEntriesWithSameIcon() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; + TRAP(err, + // Check database before remove + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesBeforeRemove(0); + query->ExecuteL(countEntriesBeforeRemove); + CleanupStack::PopAndDestroy(query); + + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromIconTable); + query->PrepareL(); + TInt countIconsBeforeRemove(0); + query->ExecuteL(countIconsBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // Remove from database + RArray entriesToRemoveArray; + CleanupClosePushL(entriesToRemoveArray); + // both entries with same icon + entriesToRemoveArray.AppendL(19); + entriesToRemoveArray.AppendL(20); + mStorage->RemoveL(entriesToRemoveArray); + + // Check result after remove + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesAfterRemove(0); + query->ExecuteL(countEntriesAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countEntriesBeforeRemove - countEntriesAfterRemove) == entriesToRemoveArray.Count()) { + err = KErrNone; +} + +query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); +query->SetQueryL(KSQLGetIdCountFromIconTable); +query->PrepareL(); +TInt countIconsAfterRemove(0); +query->ExecuteL(countIconsAfterRemove); +CleanupStack::PopAndDestroy(query); + +if (countIconsBeforeRemove - countIconsAfterRemove == 1) { + err = KErrNone; +} else { + err = KErrGeneral; +} + +CleanupStack::PopAndDestroy(&entriesToRemoveArray); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemoveOneEntryWithoutIcon() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; + TRAP(err, + // Check database before remove + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesBeforeRemove(0); + query->ExecuteL(countEntriesBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // Remove from database + RArray entriesToRemoveArray; + CleanupClosePushL(entriesToRemoveArray); + // id = 12 app without icon + TInt entryId = 12; + entriesToRemoveArray.AppendL(entryId); + mStorage->RemoveL(entriesToRemoveArray); + + // Check result after remove + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesAfterRemove(0); + query->ExecuteL(countEntriesAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countEntriesBeforeRemove - countEntriesAfterRemove) == entriesToRemoveArray.Count()) { + err = KErrNone; +} + +CleanupStack::PopAndDestroy(&entriesToRemoveArray); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemove5Entries() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; + + TRAP(err, + // Check database before remove + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesBeforeRemove(0); + query->ExecuteL(countEntriesBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // Remove from database + RArray entriesToRemoveArray; + CleanupClosePushL(entriesToRemoveArray); + // 5 entries + entriesToRemoveArray.AppendL(4); + entriesToRemoveArray.AppendL(5); + entriesToRemoveArray.AppendL(10); + entriesToRemoveArray.AppendL(13); + entriesToRemoveArray.AppendL(14); + + mStorage->RemoveL(entriesToRemoveArray); + + // Check result after remove + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesAfterRemove(0); + query->ExecuteL(countEntriesAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countEntriesBeforeRemove - countEntriesAfterRemove) == entriesToRemoveArray.Count()) { + err = KErrNone; +} + +CleanupStack::PopAndDestroy(&entriesToRemoveArray); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemoveEntriesWithIdOutOFBound() +{ + TInt err(KErrGeneral); + __UHEAP_MARK; + TRAP(err, + // Check database before remove + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromEntryTable); + query->PrepareL(); + TInt countEntriesBeforeRemove(0); + query->ExecuteL(countEntriesBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // Remove from database + RArray entriesToRemoveArray; + CleanupClosePushL(entriesToRemoveArray); + // 5 entries + entriesToRemoveArray.AppendL(4); + entriesToRemoveArray.AppendL(5); + entriesToRemoveArray.AppendL(56); // Id out of bound + entriesToRemoveArray.AppendL(13); + entriesToRemoveArray.AppendL(87); // Id out of bound + + // shold leave with KErrNotFound + TRAPD(err2, mStorage->RemoveL(entriesToRemoveArray)); + if (err2 == KErrNotFound) { + err = KErrNone; +} else { + err = KErrGeneral; +} + + +// Check result after remove +query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); +query->SetQueryL(KSQLGetIdCountFromEntryTable); +query->PrepareL(); +TInt countEntriesAfterRemove(0); +query->ExecuteL(countEntriesAfterRemove); +CleanupStack::PopAndDestroy(query); + +if (countEntriesBeforeRemove == countEntriesAfterRemove) { + err = KErrNone; +} else { + err = KErrGeneral; +} + +CleanupStack::PopAndDestroy(&entriesToRemoveArray); + ); + __UHEAP_MARKEND; + QCOMPARE(err, KErrNone); +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/src/castoragetesttouch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetesttouch.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,284 @@ +/* +* 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: +* +*/ +/* + * castoragetesttouch.cpp + * + * Created on: 2009-08-17 + * Author: michal.wojcik + */ + +#include "castoragetest.h" +#include "castoragefactory.h" +#include "castorage.h" +#include "cainnerentry.h" +#include "casqlquery.h" +#include "casqlitestorage.h" +#include "castoragetestsqlcommands.h" +#include "casqlcommands.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCAStorageTest::testTouch() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + // check database before touch + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchBeforeTouch(0); + query->ExecuteL(countLaunchBeforeTouch); + CleanupStack::PopAndDestroy(query); + + // Id 14 - Clock app + mStorage->TouchL(14, ETrue); + + // check database after touch + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchAfterTouch(0); + query->ExecuteL(countLaunchAfterTouch); + CleanupStack::PopAndDestroy(query); + + // flag should be set to EUsed on 1 Entry + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetUsedFlagCountFromEntryTable); + query->PrepareL(); + query->BindValuesForLaunchL(0,0); + TInt countEntriesWithUsedFlag(0); + query->ExecuteL(countEntriesWithUsedFlag); + CleanupStack::PopAndDestroy(query); + + if (((countLaunchAfterTouch - countLaunchBeforeTouch) == 1) && (countEntriesWithUsedFlag == 1)) { + err = KErrNone; +} else { + err = KErrGeneral; +} + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testTouch2Times() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + // check database before touch + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchBeforeTouch(0); + query->ExecuteL(countLaunchBeforeTouch); + CleanupStack::PopAndDestroy(query); + + // Id 14 - Clock app + mStorage->TouchL(14, ETrue);//removable application + User::After(1000000); // 1 sec + mStorage->TouchL(14, ETrue); + + // check database after touch + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchAfterTouch(0); + query->ExecuteL(countLaunchAfterTouch); + CleanupStack::PopAndDestroy(query); + + // flag should be set to EUsed on 1 Entry + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetUsedFlagCountFromEntryTable); + query->PrepareL(); + query->BindValuesForLaunchL(0,0); + TInt countEntriesWithUsedFlag(0); + query->ExecuteL(countEntriesWithUsedFlag); + CleanupStack::PopAndDestroy(query); + + if (((countLaunchAfterTouch - countLaunchBeforeTouch) == 2) && (countEntriesWithUsedFlag == 1)) { + err = KErrNone; +} else { + err = KErrGeneral; +} + ); + + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testTouch5Entries() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + + TRAP(err, + // check database before touch + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchBeforeTouch(0); + query->ExecuteL(countLaunchBeforeTouch); + CleanupStack::PopAndDestroy(query); + //all apps are not removeable + mStorage->TouchL(9, EFalse); // calendar + mStorage->TouchL(10, EFalse); // calculator + mStorage->TouchL(16, EFalse); // music player + mStorage->TouchL(20, EFalse); // photos + mStorage->TouchL(21, EFalse); // video center + + // check database after touch + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchAfterTouch(0); + query->ExecuteL(countLaunchAfterTouch); + CleanupStack::PopAndDestroy(query); + + // flag should be set to EUsed on 5 Entries + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetUsedFlagCountFromEntryTable); + query->PrepareL(); + query->BindValuesForLaunchL(0,0); + TInt countEntriesWithUsedFlag(0); + query->ExecuteL(countEntriesWithUsedFlag); + CleanupStack::PopAndDestroy(query); + + if (((countLaunchAfterTouch - countLaunchBeforeTouch) == 5) && (countEntriesWithUsedFlag == 0)) { + err = KErrNone; +} else { + err = KErrGeneral; +} + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemoveOldFromLaunch() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + // prepare time older than 30 days + TTime presentTime; + presentTime.UniversalTime(); + TTime outOfDateTime = presentTime - (TTimeIntervalDays(30 + 5)); + + // prepare item with launch time older than 30 days + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLInsertToLaunch); + query->PrepareL(); + // change launch time for calculator app to older than 30 days + query->BindValuesForLaunchL(10, outOfDateTime.Int64()); + query->ExecuteL(); + CleanupStack::PopAndDestroy(query); + // prepare 2 items with launch time newer than 30 days + mStorage->TouchL(20, EFalse); // photos + mStorage->TouchL(21, EFalse); // video center + + // check database before remove old launch + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchBeforeRemove(0); + query->ExecuteL(countLaunchBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // remove launches older than 30 days + ((CCaSqLiteStorage *)mStorage)->RemoveOldEntriesFromLaunchTableL(30); + + // check database after remove old launches + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchAfterRemove(0); + query->ExecuteL(countLaunchAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countLaunchBeforeRemove - countLaunchAfterRemove) == 1) { + err = KErrNone; +} else { + err = KErrGeneral; +} + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} + +void CCAStorageTest::testRemoveOldWhen2DifferentLaunchTimes() +{ + TInt err(KErrGeneral); + + __UHEAP_MARK; + TRAP(err, + // prepare time older than 30 days + TTime presentTime; + presentTime.UniversalTime(); + TTime outOfDateTime = presentTime - (TTimeIntervalDays(30 + 5)); + + // prepare item with launch time older than 30 days + CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLInsertToLaunch); + query->PrepareL(); + // change launch time for calculator app to older than 30 days + query->BindValuesForLaunchL(10, outOfDateTime.Int64()); + query->ExecuteL(); + CleanupStack::PopAndDestroy(query); + // prepare 2 items with launch time newer than 30 days + mStorage->TouchL(10, EFalse); // launch the same app again - time newer than 30 days + + // check database before remove old launch + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchBeforeRemove(0); + query->ExecuteL(countLaunchBeforeRemove); + CleanupStack::PopAndDestroy(query); + + // remove launches older than 30 days + ((CCaSqLiteStorage *)mStorage)->RemoveOldEntriesFromLaunchTableL(30); + + // check database after remove old launches + query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb); + query->SetQueryL(KSQLGetIdCountFromLaunchTable); + query->PrepareL(); + TInt countLaunchAfterRemove(0); + query->ExecuteL(countLaunchAfterRemove); + CleanupStack::PopAndDestroy(query); + + if ((countLaunchBeforeRemove - countLaunchAfterRemove) == 1) { + err = KErrNone; +} else { + err = KErrGeneral; +} + ); + __UHEAP_MARKEND; + + QCOMPARE(err, KErrNone); +} diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/t_castorage.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/t_castorage.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,19 @@ +# +# 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: +# + +HEADERS += ./inc/*.h ../../inc/*.h +SOURCES += ./src/*.cpp ../../src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/t_castorage/t_castorage.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/t_castorage/t_castorage.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,86 @@ +# 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: +TEMPLATE = app +include(../../../../common.pri) +CONFIG(debug, debug|release):DESTDIR = debug +else:DESTDIR = release +CONFIG += debug_and_release \ + console +QT += testlib \ + xml +DEFINES += CONTENT_ARSENAL_STORAGE_UT + +coverage:DEFINES += COVERAGE_MEASUREMENT +DEPENDPATH += . \ + ./inc \ + ./src +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../homescreensrv_plat/contentstorage_api +INCLUDEPATH += ../../../cautils/inc \ + ../../inc +symbian: { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.UID2 = 0x1000008D + TARGET.UID3 = 0x20026FAB + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ + ../../inc \ + ../../../cautils/inc \ + ../../../srvinc \ + ../../../inc + LIBS += -leuser \ + -lsqldb \ + -lestor \ + -lefsrv \ + -lbafl \ + -lcautils \ + -lflogger \ + -lxqutils + + exportRunScript.sources = ./data/castorage.bat + exportRunScript.path = /testing/data/t_castorage/ + + exportDB.sources = ./data/castorage.db + exportDB.path = /testing/data/t_castorage/ + + exportCorruptedDB.sources = ./data/corruptedcastoragedb + exportCorruptedDB.path = /testing/data/t_castorage/ + + exportVersionDB.sources = ./data/versioncastoragedb + exportVersionDB.path = /testing/data/t_castorage/ + + + + DEPLOYMENT += \ + exportRunScript \ + exportDB \ + exportCorruptedDB \ + exportVersionDB + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} c:$${exportDB.path}" + BLD_INF_RULES.prj_testexports += "$${exportCorruptedDB.sources} c:$${exportCorruptedDB.path}" + BLD_INF_RULES.prj_testexports += "$${exportVersionDB.sources} c:$${exportVersionDB.path}" + +} +include(t_castorage.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/castorage/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/castorage/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +TEMPLATE = subdirs +SUBDIRS = t_castorage + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/misc/cmt/caconf.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/misc/cmt/caconf.ini Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,16 @@ +MCCABE_FUNCTION_MAX=20 +V_FUNCTION_MIN=1 +V_FUNCTION_MAX=2000 +V_FILE_MIN=1 +V_FILE_MAX=20000 +LOC_FUNCTION_MIN=1 +LOC_FUNCTION_MAX=100 +LOC_FILE_MIN=1 +LOC_FILE_MAX=2000 +B_FILE_MIN=0 +B_FILE_MAX=10 +COMMENT_RATIO_FILE_MIN=0 +COMMENT_RATIO_FILE_MAX=100 +COMMENT_RATIO_FUNCTION_MIN=0 +COMMENT_RATIO_FUNCTION_MAX=100 +COMMENT_FUNCTION_MIN=0 diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/misc/cmt/cmtca.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/misc/cmt/cmtca.cmd Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,19 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call collectcafiles.cmd +cmt -c caconf.ini -o cacmt.txt < cafiles.txt +cmt2html -i cacmt.txt \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/misc/cmt/collectcafiles.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/misc/cmt/collectcafiles.cmd Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +dir ..\..\caclient\src\*.cpp /s /b >>cafiles.txt +dir ..\..\caclient\s60\src\*.cpp /s /b >>cafiles.txt +dir ..\..\castorage\src\*.cpp /s /b >>cafiles.txt +dir ..\..\engsrc\*.cpp /s /b >>cafiles.txt +dir ..\..\extsrc\*.cpp /s /b >>cafiles.txt +dir ..\..\cahandler\app\src\*.cpp /s /b >>cafiles.txt +dir ..\..\cahandler\url\src\*.cpp /s /b >>cafiles.txt +dir ..\..\src\*.cpp /s /b >>cafiles.txt +dir ..\..\srvsrc\*.cpp /s /b >>cafiles.txt +dir ..\..\cautils\src\*.cpp /s /b >>cafiles.txt diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/data/castorage.db Binary file contentstorage/tsrc/t_casrv/data/castorage.db has changed diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE+../../srvsrc/casrvengutils.cpp" abld build winscw udeb diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../../srvsrc/casrvengutils.cpp*\" sbs -j 4 -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_casrv -o c:\\t_casrv.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/inc/casrvtestutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/inc/casrvtestutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,68 @@ +/* +* 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: +* +*/ +#ifndef CA_SRV_TEST_UTILS_H +#define CA_SRV_TEST_UTILS_H +//utility class for tests +//all utility methods should be implemented here + +#include "casrvengutils.h" +#include "casrvplugin.h" + +class CCaStorageProxy; +class CCaInnerEntry; +class CCaSrvEngUtils; + +class CTestUtils: public CBase +{ +public: + + /**/ + virtual ~CTestUtils(); + + /**/ + static CTestUtils* NewL(); + + /**/ + static CTestUtils* NewLC(); + + + /** + * Copys test Db + */ + TInt CopyDb(); + + /** + * Checks if app exists in Db + private: + + /** + * Copys files + */ + TInt Copy( const TDesC& aSource, const TDesC& aDest ); + + CTestUtils(); + + void ConstructL(); + + RFs iFs; + CFileMan* iFileManager; + /* + * own + */ +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/inc/t_casrvutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/inc/t_casrvutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +#ifndef __T_casrvUtils_H__ +#define __T_casrvUtils_H__ +class CTestUtils; +class CCaStorageProxy; +class CCaSrvEngUtils; +class CCaSrvAppScanner; +#include +#include + +class T_casrvUtils: public QObject +{ + Q_OBJECT +private slots: // New methods + + //setup methods + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + //tests + void testNewL(); + void testGetAppUidL(); + void testGetApaAppInfoL(); + void testGetAppInfoL(); + void testIsNativeL(); +private: // Data + + CTestUtils *iTestUtils; + + CCaStorageProxy *iStorage; + + CCaSrvEngUtils *iSrvEngUtils; +}; + +#endif // __T_casrvUtils_H__ + +// End of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/inc/testconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/inc/testconsts.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ +/* + * testconsts.h + * + * Created on: 2009-08-24 + * + */ + +#ifndef TESTCONSTS_H_ +#define TESTCONSTS_H_ + +// CONSTANTS + +//test utils +_LIT(KTestDbSource, "C:\\testing\\data\\t_casrv\\castorage.db"); +_LIT(KTestDbDest, "C:\\castorage.db"); + +_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); + + +//app scanner +const TInt noteApp = 0xA0000230; +const TInt notInstalledUid = 0xA0000232;// uid of not installed app +const TInt installedUid = 0xE6BC1167; // installed app +//const TInt KSystemApp = 0x10005901;// system app eg. clock +const TInt KSystemApp = 0x20022EF9; + +_LIT( KMmcIdValue, "00000001" ); + + + +#endif /* TESTCONSTS_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_casrv_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\sis\rd.cer -key ..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/src/casrvtestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/src/casrvtestutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,110 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "castorageproxy.h" +#include "cainnerentry.h" +#include "cainnerquery.h" +#include "caarraycleanup.inl" + +#include "casrvtestutils.h" +#include "testconsts.h" + + +//----------------------------------------------------------------------- +// CONSTRUCTION +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewL() + { + CTestUtils* self = CTestUtils::NewLC(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CTestUtils* CTestUtils::NewLC() + { + CTestUtils* self = new( ELeave ) CTestUtils(); + CleanupStack::PushL( self ); + + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor (virtual by CBase) +// --------------------------------------------------------------------------- +// +CTestUtils::~CTestUtils() + { + iFileManager->Delete(KTestDbDest); + delete iFileManager; iFileManager = NULL; + iFs.Close(); + } + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CTestUtils::CTestUtils() + { + + } + +// --------------------------------------------------------------------------- +// Second phase construct +// --------------------------------------------------------------------------- +// +void CTestUtils::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iFileManager = CFileMan::NewL( iFs ); + } + + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::Copy( const TDesC& aSource, const TDesC& aDest ) + { + return iFileManager->Copy(aSource, aDest); + } + +//----------------------------------------------------------------------- +// +//----------------------------------------------------------------------- +TInt CTestUtils::CopyDb() + { + return Copy(KTestDbSource, KTestDbDest); + } + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/src/t_casrvutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/src/t_casrvutils.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +// CLASS HEADER +#include "T_casrvUtils.h" + +// EXTERNAL INCLUDES +#include +#include + +#include "cadef.h" +#include "castorageproxy.h" +#include "castorage.h" +#include "casrvengutils.h" +#include "cainnerentry.h" + +// INTERNAL INCLUDES +#include "casrvtestutils.h" +#include "testconsts.h" + +// CONSTANTS +const TUid KAppScannerPluginUid = {0x20026FAF}; + +void T_casrvUtils::initTestCase() +{ +} + +void T_casrvUtils::cleanupTestCase() +{ +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +T_casrvUtils::init() +{ + TRAPD(err, + iTestUtils = CTestUtils::NewL(); + iTestUtils->CopyDb(); + + iStorage = CCaStorageProxy::NewL(); + + iSrvEngUtils = CCaSrvEngUtils::NewL(); + ); + QCOMPARE(err, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +T_casrvUtils::cleanup() +{ + + delete iSrvEngUtils; + iSrvEngUtils = NULL; + delete iStorage; + iStorage = NULL; + delete iTestUtils; + iTestUtils = NULL; + +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +T_casrvUtils::testNewL() +{ + CCaSrvEngUtils *obj(0); + + TRAPD(err, obj = CCaSrvEngUtils::NewL()); + QCOMPARE(err, KErrNone); + + QVERIFY(obj != NULL); + + delete obj; +} + +void +T_casrvUtils::testGetAppUidL() +{ + TInt getAppUidResult(KErrGeneral); + TInt getInvalidAppUidResult(KErrNone); + TUid actualAppUid = TUid::Uid(0); + const TInt32 expectedAppUid = 1; + + TRAPD(err, + CCaInnerEntry *const entry = CCaInnerEntry::NewLC(); + + entry->SetUid(expectedAppUid); + + + getAppUidResult = + iSrvEngUtils->GetAppUid(*entry, actualAppUid); + + const TInt32 invalidUid = 0; + entry->SetUid(invalidUid); + + getInvalidAppUidResult = + iSrvEngUtils->GetAppUid(*entry, actualAppUid); + + CleanupStack::PopAndDestroy(entry); + ); + + QCOMPARE(err, KErrNone); + QCOMPARE(getAppUidResult, KErrNone); + QCOMPARE(expectedAppUid, actualAppUid.iUid); + QCOMPARE(getInvalidAppUidResult, KErrNotFound); +} + +void +T_casrvUtils::testGetApaAppInfoL() +{ + TApaAppInfo referenceInfo; + + RApaLsSession apaLsSession; + TInt err(KErrNone); + TRAP(err, User::LeaveIfError(apaLsSession.Connect())); + QCOMPARE(err, KErrNone); + + QCOMPARE(apaLsSession.GetAppInfo(referenceInfo, TUid::Uid(KSystemApp)), KErrNone); + + TApaAppInfo srvEngUtilsInfo; + const TInt result = iSrvEngUtils->GetApaAppInfo( + TUid::Uid(KSystemApp), srvEngUtilsInfo); + QCOMPARE(result, KErrNone); + + QCOMPARE(srvEngUtilsInfo.iUid.iUid, referenceInfo.iUid.iUid); + QVERIFY(srvEngUtilsInfo.iFullName.Compare(referenceInfo.iFullName) == 0); + QVERIFY(srvEngUtilsInfo.iCaption.Compare(referenceInfo.iCaption) == 0); + QVERIFY(srvEngUtilsInfo.iShortCaption.Compare(referenceInfo.iShortCaption) == 0); +} + +void +T_casrvUtils::testGetAppInfoL() +{ + CCaInnerEntry *entry(0); + TRAPD(err, + entry = CCaInnerEntry::NewLC(); + CleanupStack::Pop(entry); + ); + QCOMPARE(err, KErrNone); + + TApaAppInfo info; + + entry->SetUid(KSystemApp); + + TInt result = iSrvEngUtils->GetAppInfo(*entry, info); + QCOMPARE(result, KErrNone); + QCOMPARE(info.iUid.iUid, static_cast(KSystemApp)); + QVERIFY(info.iFullName.Compare(_L("Z:\\sys\\bin\\phonebook.exe")) == 0); + QVERIFY(info.iCaption.Compare(_L("Contacts")) == 0); + QVERIFY(info.iShortCaption.Length()>0); + + const TInt32 invalidUid = 0; + entry->SetUid(invalidUid); + QCOMPARE(iSrvEngUtils->GetAppInfo(*entry, info), KErrNotFound); + + entry->SetUid(notInstalledUid); + QCOMPARE(iSrvEngUtils->GetAppInfo(*entry, info), KErrNotFound); + + delete entry; +} + +void +T_casrvUtils::testIsNativeL() +{ + CCaInnerEntry *entry(0); + TRAPD(err, + entry = CCaInnerEntry::NewLC(); + entry->SetEntryTypeNameL(KCaTypeApp); + CleanupStack::Pop(entry); + ); + QCOMPARE(err, KErrNone); + + + entry->SetUid(KSystemApp); + + const TInt32 isNative = iSrvEngUtils->IsNativeL(*entry); + + QVERIFY(isNative != 0); + + delete entry; +} + +QTEST_MAIN(T_casrvUtils) + +// END OF FILE diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/t_casrv.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/t_casrv.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,31 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + +SOURCES += ./src/*.cpp \ + ../../srvsrc/cainstallnotifier.cpp \ + ../../srvsrc/cainstallstrategy.cpp \ + ../../srvsrc/casrvengutils.cpp \ + ../../srvsrc/castorageproxy.cpp \ + ../../srvsrc/casrvnotifier.cpp \ + ../../srvsrc/casrv.cpp \ + ../../srvsrc/casrvmmchistory.cpp \ + ../../srvsrc/casrvsession.cpp \ + ../../srvsrc/cabackupnotifier.cpp \ + ../../cautils/src/*.cpp \ + ../../castorage/src/*.cpp \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/t_casrv.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/t_casrv.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,105 @@ +# 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: + + +TEMPLATE = app + +include(../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} +CONFIG += HB +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../homescreensrv_plat/contentstorage_api \ + ../../srvinc \ + ../../extinc \ + ../../cautils/inc \ + ../../casrv/casrvmgr/inc \ + ../../castorage/inc \ + ../../../srvinc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_casrv.pri) + +symbian: { + ### get rid of localization warnings + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + ### + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x2002870D + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -lcautils \ + -lcasathandler \ + -lefsrv \ + -lestor \ + -lapparc \ + -lCenRepNotifHandler \ + -lcentralrepository \ + -lplatformenv \ + -lsysutil \ + -leuser \ + -lapgrfx \ + -lws32 \ + -lbafl \ + -lavkon \ + -lcone \ + -lcasrvmanager \ + -lsisregistryclient \ + -lecom \ + -lsqldb \ + -lflogger \ + -lscrclient \ + -lsifnotification + + exportDB.sources = ./data/castorage.db + exportDB.path = c:/testing/data/t_casrv/ + + BLD_INF_RULES.prj_testexports += "$${exportDB.sources} $${exportDB.path}" + + DEPLOYMENT += exportDB +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_casrv/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_casrv/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_casrv.exe -o c:\t_casrv.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/coverageafter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/coverageafter.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,22 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call ctcpost -p profile.txt +call ctc2html -nsb -i profile.txt -o CTCFUNCTION +call del profile.txt; +call ctcpost -fd -p profile.txt; +call ctc2html -nsb -i profile.txt -o CTCDECISION; + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/decision.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/decision.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call cd ../../group + +call del mon.sym +call del mon.dat +call rmdir /s /q CTCHTML + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call ctcwrap -i fd -C "EXCLUDE=*" -C "NO_EXCLUDE=../extsrc/casat*" abld build winscw udeb + +call cd ../tsrc/t_sathandler/ + +call bldmake bldfiles +call abld makefile winscw udeb +call abld reallyclean winscw udeb +call abld build winscw udeb + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,66 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + chdir("../../group"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../extsrc/casat*\" sbs -j 4 -c winscw_udeb"); + + + chdir("../tsrc/t_sathandler"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_sathandler -o c:\\t_sathandler.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../../group"); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../tsrc/t_sathandler/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../tsrc/t_sathandler/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/inc/T_casathandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/inc/T_casathandler.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +/* +* 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: +* +*/ +/* + * T_casathandler.h + * + * Created on: 2009-09-16 + * Author: + */ + +#ifndef T_CASATHANDLER_H +#define T_CASATHANDLER_H + +#include +#include + +class CSatMonitor; +/** + * + * Test class. + * + */ +class T_CaSatHandler: public QObject +{ + Q_OBJECT +private slots: + + //tests + void testConstruction(); + void testGetName(); + void testCheckVisibility(); + void testGetIcon(); + + void testGetBitmap(); +}; + +#endif // T_CASATHANDLER_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_sathandler_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\sis\rd.cer -key ..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/readme.txt Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,1 @@ +On HW SIM card with SAT application musb be inserted. Device must be in online mode. \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/src/T_casathandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/src/T_casathandler.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,148 @@ +/* +* 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: +* +*/ +/* + * T_casathandler.cpp + * + * Created on: 2009-09-16 + * Author: + */ + + +#include "cadef.h" +#include "ca2internalCRkeys.h" +#include "T_casathandler.h" +#include "casathandler.h" +#include "e32property.h" + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatHandler::testConstruction() +{ + bool constructed(false); + TRAPD(err, + CCaSatHandler *satHandler = CCaSatHandler::NewL(); + CleanupStack::PushL(satHandler); + + constructed = satHandler != NULL; + + CleanupStack::PopAndDestroy(satHandler); + ); + QCOMPARE(err, KErrNone); + QVERIFY(constructed); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatHandler::testGetName() +{ + bool nameMatches(false); + TRAPD(err, + CCaSatHandler *satHandler = CCaSatHandler::NewL(); + CleanupStack::PushL(satHandler); + RBuf satName; + satName.CleanupClosePushL(); + satName.Create(KCenRepBufferSize); + RProperty::Get(KCRUidCa, KCaSatUIName, satName); + RBuf satHandlerName; + satHandlerName.CleanupClosePushL(); + satHandlerName.Create(KCenRepBufferSize); + satHandler->GetName(satHandlerName); + + nameMatches = satHandlerName.Compare(satName) == 0; + + CleanupStack::PopAndDestroy(&satHandlerName); + CleanupStack::PopAndDestroy(&satName); + CleanupStack::PopAndDestroy(satHandler); + ); + QCOMPARE(err, KErrNone); + QVERIFY(nameMatches); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatHandler::testCheckVisibility() +{ + ; + TInt visibility(KErrNone); + RProperty::Get(KCRUidCa, KCaShowSatUI, visibility); + TBool visibilityHandler = CCaSatHandler::CheckVisibility(); + QCOMPARE(visibilityHandler, visibility); +} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatHandler::testGetIcon() +{ + // preconditions + RProperty::Define( KCRUidCa, KCaSatUIIconId, RProperty::EInt ); + + bool loadIconResult(false); + TInt setSizeResult(KErrNone); + TRAPD(err, + CCaSatHandler *satHandler = CCaSatHandler::NewL(); + CleanupStack::PushL(satHandler); + TInt iconId(KErrNone); + User::LeaveIfError(RProperty::Get(KCRUidCa, KCaSatUIIconId, iconId)); + if (iconId > 0) { + CAknIcon *icon = NULL; + icon = satHandler->LoadIconL(); + CleanupStack::PushL(icon); + loadIconResult = (icon != NULL); + TSize size(1, 1); + //TInt err = AknIconUtils::SetSize( icon->Bitmap(), size ) ; + setSizeResult = AknIconUtils::SetSize(icon->Bitmap(), size); + CleanupStack::PopAndDestroy(icon); + } else { + CAknIcon *icon = NULL; + icon = satHandler->LoadIconL(); + loadIconResult = (icon == NULL); + } + CleanupStack::PopAndDestroy(satHandler); + ); + + QCOMPARE(err, KErrNone); + QVERIFY(loadIconResult); + QCOMPARE(setSizeResult, KErrNone); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void T_CaSatHandler::testGetBitmap() +{ + CCaSatHandler *satHandler = CCaSatHandler::NewL(); + CleanupStack::PushL(satHandler); + RIconEf iIconEf; + CleanupClosePushL(iIconEf); + //CFbsBitmap* bitmap = satHandler->GetBitmapL( iIconEf ); + //EUNIT_ASSERT( !bitmap ); + CleanupStack::PopAndDestroy(&iIconEf); + CleanupStack::PopAndDestroy(satHandler); +} + +QTEST_MAIN(T_CaSatHandler); diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/t_sathandler.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/t_sathandler.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +HEADERS += ./inc/*.h + +SOURCES += ./src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/t_sathandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/t_sathandler.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,75 @@ +# 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: + + +TEMPLATE = app + +include(../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib + +DEFINES += CONTENT_ARSENAL_STORAGE_UT +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += \ + ./inc \ + ../../inc \ + ../../cautils/inc \ + ../../extinc \ + ../../castorage/inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_sathandler.pri) + +symbian: { + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20028712 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lecom \ + -lcasathandler \ + -laknicon \ + -lSatClient \ + -lfbscli \ + -lbitgdi +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/t_sathandler/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/t_sathandler/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_sathandler.exe -o c:\t_sathandler.log diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/testutils/inc/t_cainstaller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/testutils/inc/t_cainstaller.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2010 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: ?Description + * + */ + +#ifndef T_CA_INSTALLER_H +#define T_CA_INSTALLER_H + +#include +#include +#include +#include + +/** + * Installer + * + */ +NONSHARABLE_CLASS(T_CaInstaller): public CActive { + +public: + /** + * Destructor + */ + virtual ~T_CaInstaller(); + + /** + * Two-phased constructor. Leaves on failure. + * Allocates memory for and constructs an uninstaller object. After that + * starts asynchronous uninnstallation of the requested entry + * @param aFileName name of the file to be installed + * @param aPriority priority of the active scheduler responsible for handling + * asynchronous installation operation + * @return The constructed object. + */ + static T_CaInstaller *NewL( TInt aPriority = + CActive::EPriorityStandard ); + + /** + * Starts asynchronous installation operation + * @param aFileName name of the file to be installed + * @param aComponentId placeholder for component id of the package after + * instalation is completed. + */ + void InstallL(const TDesC& aFileName); + /** + * Uninstall operation + * @param aComponentId id of the component to be installed. + */ + void UninstallL( Usif::TComponentId aComponentId ); + + /** + * Uninstall operation for package(s) based on filename + * for native and HS widgets. + * @param aFileName the file name installed with the package(s) + */ + void UninstallL( const TDesC& aFileName ); + + /** + * Uninstall operation for java applications + * @param aUid ui + */ + void UninstallL(TUint32 aUid); + + /** + * Find component id for a file name + * @param aFileName the file name installed with the package(s) + * @return componentId for a requested file name + */ + Usif::TComponentId GetComponentIdL( const TDesC& aFileName ); + + /** + * Find component id for a uid + * @param aUid ui + * @return componentId for a requested uid + */ + Usif::TComponentId GetComponentIdL( TInt32 aUid ); + + /** + * Find component id for CWRT app id + * @param aAppId CWRT widget app id + * @return componentId for a requested uid + */ + Usif::TComponentId GetComponentIdForAppIdL( const TDesC& aAppId); +private: + // construction + /** + * Constructor. + * Starts active scheduler. + * @param aPriority priority of the active scheduler responsible for handling + * asynchronous installation operation + */ + T_CaInstaller(TInt aPriority); + + /** + * Initializes the object and starts asynchronous uninstallation process. + */ + void ConstructL(); + + + +private: + // from CActive + + void RunL(); + void DoCancel(); + TInt RunError( TInt aError ); + +private: + Usif::COpaqueNamedParams* iArguments; + Usif::COpaqueNamedParams* iResults; + RFs iFs; + Usif::RSoftwareInstall iInstaller; + Usif::RSoftwareComponentRegistry iSoftwareRegistry; + CActiveSchedulerWait iSchedulerWait; +}; + +#endif // T_CA_INSTALLER_H diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/testutils/src/t_cainstaller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/testutils/src/t_cainstaller.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2010 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: ?Description + * + */ + +#include +#include + +#include "t_cainstaller.h" + +using namespace Usif; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// T_CaInstaller::~T_CaInstaller +// --------------------------------------------------------------------------- +// +T_CaInstaller::~T_CaInstaller() + { + Cancel(); + iFs.Close(); + delete iArguments; + delete iResults; + iInstaller.Close(); + iSoftwareRegistry.Close(); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::NewL +// --------------------------------------------------------------------------- +// +T_CaInstaller *T_CaInstaller::NewL(TInt aPriority) + { + T_CaInstaller *self = new (ELeave) T_CaInstaller( + aPriority ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::T_CaInstaller +// --------------------------------------------------------------------------- +// +T_CaInstaller::T_CaInstaller( TInt aPriority ) : + CActive( aPriority ), iInstaller() + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::ConstructL +// --------------------------------------------------------------------------- +// +void T_CaInstaller::ConstructL() + { + User::LeaveIfError( iInstaller.Connect() ); + User::LeaveIfError( iSoftwareRegistry.Connect() ); + User::LeaveIfError( iFs.Connect() ); + + iArguments = COpaqueNamedParams::NewL(); + iResults = COpaqueNamedParams::NewL(); + + iArguments->AddIntL( KSifInParam_InstallInactive, ETrue ); + iArguments->AddIntL( KSifInParam_InstallSilently, ETrue ); + } + +// --------------------------------------------------------------------------- +// T_CaInstallOperation::ConstructL +// --------------------------------------------------------------------------- +// +void T_CaInstaller::InstallL( const TDesC& aFileName ) + { + if (IsActive()) + { + User::Leave(KErrInUse); + } + + iInstaller.Install( aFileName, *iArguments, *iResults, iStatus ); + + SetActive(); + + iSchedulerWait.Start(); + + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::UnistallL +// --------------------------------------------------------------------------- +// +void T_CaInstaller::UninstallL(TComponentId aComponentId) + { + if (IsActive()) + { + User::Leave( KErrInUse ); + } + + if (aComponentId >= 1) + { + iInstaller.Uninstall( aComponentId, *iArguments, *iResults, iStatus ); + + SetActive(); + + iSchedulerWait.Start(); + } + + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::UnistallL +// --------------------------------------------------------------------------- +// +void T_CaInstaller::UninstallL(const TDesC& aFileName) + { + UninstallL( GetComponentIdL(aFileName) ); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::UnistallL +// --------------------------------------------------------------------------- +// +void T_CaInstaller::UninstallL( TUint32 aUid ) + { + UninstallL( GetComponentIdL( aUid ) ); + } + +TComponentId T_CaInstaller::GetComponentIdL( const TDesC& aFileName ) + { + CComponentFilter* const fileNameFilter = CComponentFilter::NewLC(); + fileNameFilter->SetFileL( aFileName ); + + RArray componentIds; + CleanupClosePushL( componentIds ); + iSoftwareRegistry.GetComponentIdsL( componentIds, fileNameFilter ); + + TComponentId componentId( 0 ); + + if ( componentIds.Count() == 1 ) + { + componentId = componentIds[0]; + } + else if ( componentIds.Count() >= 2 ) + { + User::Leave( KErrGeneral ); + } + + CleanupStack::PopAndDestroy( &componentIds ); + CleanupStack::PopAndDestroy( fileNameFilter ); + + return componentId; + } + +TComponentId T_CaInstaller::GetComponentIdForAppIdL( const TDesC& aAppId ) + { + CComponentFilter* const appIdFilter = CComponentFilter::NewLC(); + appIdFilter->AddPropertyL( _L("AppId"), aAppId ); + + RArray componentIds; + CleanupClosePushL( componentIds ); + iSoftwareRegistry.GetComponentIdsL( componentIds, appIdFilter ); + + TComponentId componentId( 0 ); + + if ( componentIds.Count() == 1 ) + { + componentId = componentIds[0]; + } + else if ( componentIds.Count() >= 2 ) + { + User::Leave( KErrGeneral ); + } + + CleanupStack::PopAndDestroy( &componentIds ); + CleanupStack::PopAndDestroy( appIdFilter ); + + return componentId; + } + + +TComponentId T_CaInstaller::GetComponentIdL( TInt32 aUid ) + { + TUid uid; + TComponentId componentId = iSoftwareRegistry.GetComponentIdForAppL( + uid.Uid( aUid ) ); + + if ( componentId <= 0 ) + { + User::Leave( KErrGeneral ); + } + return componentId; + } +// --------------------------------------------------------------------------- +// T_CaInstaller::RunL +// --------------------------------------------------------------------------- +// +void T_CaInstaller::RunL() + { + iSchedulerWait.AsyncStop(); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::DoCancel +// --------------------------------------------------------------------------- +// +void T_CaInstaller::DoCancel() + { + iInstaller.CancelOperation(); + iSchedulerWait.AsyncStop(); + } + +// --------------------------------------------------------------------------- +// T_CaInstaller::RunError +// --------------------------------------------------------------------------- +// +TInt T_CaInstaller::RunError(TInt /* aError */) + { + return KErrNone; + } diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/testutils/testutils.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/testutils/testutils.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# 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: + + +symbian: { + LIBS += \ + -lsif \ + -lscrclient \ + -lxqutils +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f contentstorage/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += symbian_tests + + +symbian { + CONFIG += symbian_test + } + + SUBDIRS += \ + ../castorage/tsrc/t_castorage \ + ../casoftwareregistry/tsrc/t_casoftwareregistry \ + ../casrv/caappscanner/tsrc/t_caappscanner \ + ../casrv/causifscanner/tsrc/t_causifscanner \ + ../casrv/caprogresscanner/tsrc/t_caprogresscanner \ + ../casrv/calocalizerscanner/tsrc/t_calocalizerscanner \ + ../casrv/carunningappmonitor/tsrc/t_carunningappmonitor \ + ../casrv/casatmonitor/tsrc/t_satmonitor \ + ../casrv/cawidgetscanner/tsrc/t_cawidgetscanner \ + t_casrv \ + t_sathandler \ + ../caclient/tsrc/t_caclient \ + ../../homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api \ + ../cahandler/app/tsrc/t_caapphandler \ + ../cahandler/tapp/tsrc/t_catapphandler \ + ../cahandler/url/tsrc/t_caurlhandler diff -r 3ab5c078b490 -r c63ee96dbe5f homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +# +# 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: Script for running branch coverage test +# + +#USAGE: +# Usage: decision_cov.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + if (($make eq "instrument") || ($make eq "all")) { + + chdir("../../../../contentstorage/casatinterface/group"); + + system("del mon.sym"); + system("del mon.dat"); + system("del profile.txt"); + system("rmdir /s /q CTCFUNCTION"); + system("rmdir /s /q CTCDECISION"); + + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("ctcwrap -i fd -2comp -C EXCLUDE=* -C \"NO_EXCLUDE=../src/MenuSatInterface.cpp\" sbs -j 4 -c winscw_udeb"); + + + chdir("../../../homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api"); + system("call qmake -config coverage"); + system("call sbs clean -c winscw_udeb"); + system("call sbs clean -c winscw_udeb.test"); + system("call sbs -c winscw_udeb"); + + } + if (($make eq "run") || ($make eq "all")) { + system("call \\epoc32\\release\\winscw\\udeb\\t_menu_sat_interface_api -o c:\\t_menu_sat_interface_api.log"); + } + if (($make eq "ctcpost") || ($make eq "all")) { + chdir("../../../../contentstorage/casatinterface/group"); + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../../../homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -fd -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o ../../../homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/CTCDECISION"); + system("call del profile.txt"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/preparesis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/preparesis.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +set TEMPLATE_FILE=t_menu_sat_interface_api_template.pkg +set EXT=tmp + +perl -i.%EXT% -pe"s/\$\(PLATFORM\)/armv5/gm; s/\$\(TARGET\)/urel/gm; s/\(0x2001E61C\)\, \, \, \, \{\"Qt\"\}//gm" %TEMPLATE_FILE% + +createsis create -cert ..\..\..\..\sis\rd.cer -key ..\..\..\..\sis\rd-key.pem %TEMPLATE_FILE% + +move %TEMPLATE_FILE%.%EXT% %TEMPLATE_FILE% + diff -r 3ab5c078b490 -r c63ee96dbe5f homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/t_menu_sat_interface_api.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/t_menu_sat_interface_api.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +HEADERS += ./inc/*.h + +SOURCES += ./src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/t_menu_sat_interface_api.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/t_menu_sat_interface_api.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,67 @@ +# 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: + + +TEMPLATE = app + +include(../../../../common.pri) + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +CONFIG += debug_and_release \ + console +QT += testlib + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../../contentstorage/inc \ + $$MW_LAYER_SYSTEMINCLUDE + +include(t_menu_sat_interface_api.pri) + +symbian: { + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + + TARGET.UID2 = 0x10009D8D + TARGET.UID3 = 0x20028713 + TARGET.CAPABILITY = ALL \ + -TCB + TARGET.EPOCSTACKSIZE = 0x14000 \ + // \ + 80kB + TARGET.EPOCHEAPSIZE = 0x20000 \ + 0x1000000 \ + // \ + 128kB \ + - \ + 16MB + + LIBS += \ + -leuser \ + -lMenuInterface +} + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/test.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api/test.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +t_menu_sat_interface_api.exe -o c:\t_menu_sat_interface_api.log diff -r 3ab5c078b490 -r c63ee96dbe5f hsappkeyhandler/tsrc/t_hsappkeyhandler/inc/t_hsappkeyhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hsappkeyhandler/tsrc/t_hsappkeyhandler/inc/t_hsappkeyhandler.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2007-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: +* +*/ + +#ifndef T_HSAPPKEYHANDLER_H +#define T_HSAPPKEYHANDLER_H + +#include + +#include + +#include + +class CHsAppKeyPlugin; + +class T_HsAppKeyHandler : public QObject, public MHbDeviceDialogObserver +{ + Q_OBJECT + +public: + explicit T_HsAppKeyHandler(QObject *parent = 0); + +private slots: + void callDataReceived(); + void testDeviceDialogClosed(); + void testProvideKeyEvents(); + void testHandleKeyEventIgnoresKeysOtherThanAppKey(); + void testHandleKeyEventConsumesEverySecondEventForAppKey(); + void testShortPressSwitchesBetweenHsAndApplibWhenTsIsNotVisible(); + void testLongPressShowsTaskSwitcher(); + void testShortPressDismissesTaskSwitcherShownByLongpress(); + void testLongpressDoesNothingIfTaskSwitcherIsShownByOtherComponent(); + void testShortPressDismissesTaskSwitcherShownByOtherComponent(); + +private slots: + void init(); + void cleanup(); + +public: // from MHbDeviceDialogObserver + void DataReceived(CHbSymbianVariantMap &aData); + void DeviceDialogClosed(TInt aCompletionCode); + +private: // helper methods + bool makeShortPress(); + bool makeLongPress(); + bool sendKeyEventTwice(TKeyEvent keyEvent); + + bool isTaskSwitcherVisible(); + + bool showTaskSwitcher(); + +private: + CHsAppKeyPlugin *mCHsAppKeyPluginInstance; + CHbDeviceDialogSymbian *mDialog; +}; + +#endif // T_HSAPPKEYHANDLER_H diff -r 3ab5c078b490 -r c63ee96dbe5f hsappkeyhandler/tsrc/t_hsappkeyhandler/src/t_hsappkeyhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hsappkeyhandler/tsrc/t_hsappkeyhandler/src/t_hsappkeyhandler.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,343 @@ +/* +* Copyright (c) 2007-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_hsappkeyhandler.h" + +#include +#include + +#include + +#include + +#include +#include + +#include "hsappkeyplugin.h" + +QTM_USE_NAMESPACE + +namespace { + _LIT(KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0"); +} + +// ----------------------------------------------------------------------------- +// CONSTRUCTOR +// ----------------------------------------------------------------------------- +// +T_HsAppKeyHandler::T_HsAppKeyHandler(QObject *parent) : + QObject(parent), + mCHsAppKeyPluginInstance(0), + mDialog(0) +{ +} + +// ----------------------------------------------------------------------------- +// INIT AND CLEANUP +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::init() +{ + TRAPD(errNo, mCHsAppKeyPluginInstance = CHsAppKeyPlugin::NewL()); + QCOMPARE(errNo, KErrNone); + QVERIFY(mCHsAppKeyPluginInstance); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::cleanup() +{ + delete mCHsAppKeyPluginInstance; + mCHsAppKeyPluginInstance = 0; + + delete mDialog; + mDialog = 0; +} + +// ----------------------------------------------------------------------------- +// TEST CASES +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::callDataReceived() +{ + // just call unused part of HbDeviceDialogMonitor interface + CHbSymbianVariantMap *dummy; + TRAPD(errNo, dummy = CHbSymbianVariantMap::NewL()); + + QCOMPARE(errNo, KErrNone); + QVERIFY(dummy); + + mCHsAppKeyPluginInstance->DataReceived(*dummy); + delete dummy; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testProvideKeyEvents() +{ + RArray keyEventArray; + CleanupClosePushL(keyEventArray); + + TRAPD(errNo, mCHsAppKeyPluginInstance->ProvideKeyEventsL(keyEventArray)); + QCOMPARE(errNo, KErrNone); + + QCOMPARE(keyEventArray.Count(), 2); + + TKeyEvent shortPress = keyEventArray[0]; + QCOMPARE(shortPress.iCode, static_cast(EKeyApplication0)); + QCOMPARE(shortPress.iScanCode, static_cast(EStdKeyApplication0)); + QCOMPARE(shortPress.iModifiers, static_cast(0)); + QCOMPARE(shortPress.iRepeats, 0); + + TKeyEvent longPress = keyEventArray[0]; + QCOMPARE(longPress.iCode, static_cast(EKeyApplication0)); + QCOMPARE(longPress.iScanCode, static_cast(EStdKeyApplication0)); + QCOMPARE(longPress.iModifiers, static_cast(0)); + QCOMPARE(longPress.iRepeats, 0); + + CleanupStack::PopAndDestroy(&keyEventArray); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testDeviceDialogClosed() +{ + // @todo: verify that calling this method closes task switcher + mCHsAppKeyPluginInstance->DeviceDialogClosed(0); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testHandleKeyEventIgnoresKeysOtherThanAppKey() +{ + TInt errNo(KErrNone); + TKeyResponse keyResponse(EKeyWasNotConsumed); + + TKeyEvent invalidKeyEvent; + invalidKeyEvent.iCode = !EKeyApplication0; + + TRAP(errNo, keyResponse = mCHsAppKeyPluginInstance->HandleKeyEventL(invalidKeyEvent, EEventNull)); + QCOMPARE(errNo, KErrNone); + QCOMPARE(keyResponse, EKeyWasNotConsumed); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testHandleKeyEventConsumesEverySecondEventForAppKey() +{ + TInt errNo(KErrNone); + TKeyResponse keyResponse(EKeyWasNotConsumed); + + // verify that for every supported key we consume every second event and ignore the others + RArray keyEventArray; + CleanupClosePushL(keyEventArray); + TRAP(errNo, mCHsAppKeyPluginInstance->ProvideKeyEventsL(keyEventArray)); + QCOMPARE(errNo, KErrNone); + + for (TInt i(0); i != keyEventArray.Count(); ++i) { + TKeyEvent keyEvent = keyEventArray[i]; + + // first event ignored + TRAP(errNo, keyResponse = mCHsAppKeyPluginInstance->HandleKeyEventL(keyEvent, EEventNull)); + QCOMPARE(errNo, KErrNone); + QCOMPARE(keyResponse, EKeyWasNotConsumed); + + // second event consumed + TRAP(errNo, keyResponse = mCHsAppKeyPluginInstance->HandleKeyEventL(keyEvent, EEventNull)); + QCOMPARE(errNo, KErrNone); + QCOMPARE(keyResponse, EKeyWasConsumed); + } + + CleanupStack::PopAndDestroy(&keyEventArray); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testShortPressSwitchesBetweenHsAndApplibWhenTsIsNotVisible() +{ + // verify preconditions + QCOMPARE(isTaskSwitcherVisible(), false); + + QValueSpaceSubscriber hsStateGetter(QString("%1/%2").arg(HsStatePSKeyPath).arg(HsStatePSKeySubPath)); + QVERIFY(hsStateGetter.isConnected()); + + // make sure we start from homescreen + if (hsStateGetter.value().toInt() != EHomeScreenIdleState) { + QVERIFY(makeShortPress()); + } + + QVariant initialState = hsStateGetter.value(); + + QVERIFY(makeShortPress()); + QVERIFY(hsStateGetter.value() != initialState); + + QVERIFY(makeShortPress()); + QVERIFY(hsStateGetter.value() == initialState); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testLongPressShowsTaskSwitcher() +{ + // verify preconditions + QCOMPARE(isTaskSwitcherVisible(), false); + + QVERIFY(makeLongPress()); + QCOMPARE(isTaskSwitcherVisible(), true); + + // second longpress does nothing + QVERIFY(makeLongPress()); + QCOMPARE(isTaskSwitcherVisible(), true); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testShortPressDismissesTaskSwitcherShownByLongpress() +{ + // verify preconditions + QCOMPARE(isTaskSwitcherVisible(), false); + + QVERIFY(makeLongPress()); + QCOMPARE(isTaskSwitcherVisible(), true); + + QVERIFY(makeShortPress()); + QCOMPARE(isTaskSwitcherVisible(), false); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testLongpressDoesNothingIfTaskSwitcherIsShownByOtherComponent() +{ + // verify preconditions + QCOMPARE(isTaskSwitcherVisible(), false); + QVERIFY(!mDialog); + + QVERIFY(showTaskSwitcher()); + QCOMPARE(isTaskSwitcherVisible(), true); + + QVERIFY(makeLongPress()); + QCOMPARE(isTaskSwitcherVisible(), true); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::testShortPressDismissesTaskSwitcherShownByOtherComponent() +{ + // verify preconditions + QCOMPARE(isTaskSwitcherVisible(), false); + QVERIFY(!mDialog); + + QVERIFY(showTaskSwitcher()); + QCOMPARE(isTaskSwitcherVisible(), true); + + // after short press the TaskSwitcher will call DeviceDialogClosed callback + // of MHbDeviceDialogObserver, which should delete and clear mDialog member. + QVERIFY(makeShortPress()); + QTest::qWait(1000); + QCOMPARE(isTaskSwitcherVisible(), false); + QVERIFY(!mDialog); +} + +// ----------------------------------------------------------------------------- +// HELPER MEHTODS +// ----------------------------------------------------------------------------- +// + +bool T_HsAppKeyHandler::makeShortPress() +{ + TKeyEvent shortpress = {EKeyApplication0, EStdKeyApplication0, 0, 0}; + return sendKeyEventTwice(shortpress); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +bool T_HsAppKeyHandler::makeLongPress() +{ + TKeyEvent longpress = {EKeyApplication0, EStdKeyApplication0, 0, 1}; + return sendKeyEventTwice(longpress); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +bool T_HsAppKeyHandler::sendKeyEventTwice(TKeyEvent keyEvent) +{ + Q_ASSERT(mCHsAppKeyPluginInstance); + + TKeyResponse keyResponse(EKeyWasNotConsumed); + // send key event twice (HandleKeyEventL accepts every second event) + TRAPD(errNo, + mCHsAppKeyPluginInstance->HandleKeyEventL(keyEvent, EEventNull); + keyResponse = mCHsAppKeyPluginInstance->HandleKeyEventL(keyEvent, EEventNull); + ); + + return (KErrNone == errNo) && (EKeyWasConsumed == keyResponse); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +bool T_HsAppKeyHandler::isTaskSwitcherVisible() +{ + QValueSpaceSubscriber tsVisibilityGetter(QString("%1/%2").arg(TsProperty::KTsPath).arg(TsProperty::KVisibilityPath)); + Q_ASSERT(tsVisibilityGetter.isConnected()); + + QVariant tsVisibility = tsVisibilityGetter.value(); + Q_ASSERT(tsVisibility.isValid()); + return tsVisibility.toBool(); +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +bool T_HsAppKeyHandler::showTaskSwitcher() +{ + mDialog = CHbDeviceDialogSymbian::NewL(); + QScopedPointer params(CHbSymbianVariantMap::NewL()); + return KErrNone == mDialog->Show(KTsPluginName, *params, this); +} + +// --------------------------------------------------------------------------- +// MHbDeviceDialogObserver implementation +// --------------------------------------------------------------------------- +// +void T_HsAppKeyHandler::DataReceived(CHbSymbianVariantMap &/*aData*/) +{ + //no implementation required +} + +void T_HsAppKeyHandler::DeviceDialogClosed(TInt /*aCompletionCode*/) +{ + delete mDialog; + mDialog = 0; +} + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +QTEST_MAIN(T_HsAppKeyHandler) diff -r 3ab5c078b490 -r c63ee96dbe5f hsappkeyhandler/tsrc/t_hsappkeyhandler/t_hsappkeyhandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hsappkeyhandler/tsrc/t_hsappkeyhandler/t_hsappkeyhandler.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2010 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: +# + +TEMPLATE = app +CONFIG += testcase mobility + +MOBILITY = publishsubscribe + +DEPENDPATH += .\ + ./src \ + ./inc \ + ../../src \ + ../../inc \ + +INCLUDEPATH += .\ + ./inc \ + ../../inc + +symbian: { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.UID2 = 0x100039CE + TARGET.CAPABILITY = CAP_APPLICATION AllFiles + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + LIBS += -lcone -lapgrfx -lws32 -lecom -leuser -lhbcore -lapparc -lafactivitylauncher + +} + +HEADERS += ./inc/*.h \ + ../../inc/*.h + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp \ + +include(../../../common.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f hsappkeyhandler/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hsappkeyhandler/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# Copyright (c) 2010 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: +# + +TEMPLATE = subdirs + +SUBDIRS += t_hsappkeyhandler \ + +CONFIG += ordered diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/sis/t_hswidgetmodel.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/sis/t_hswidgetmodel.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +; +; 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: +; + +; Language +&EN + +; SIS header: name, uid, version +#{"t_hswidgetmodel"},(0x20022F52),1,0,0 + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Supports S60 5th Edition +[0x1028315F], 0, 0, 0, {"S60ProductID"} + +; HS widget Model unittest +"/epoc32/release/armv5/urel/t_hswidgetmodelexe.exe" - "c:/sys/bin/t_hswidgetmodelexe.exe" +"/epoc32/data/z/private/10003a3f/import/apps/t_hswidgetmodelexe_reg.rsc" - "c:/private/10003a3f/import/apps/t_hswidgetmodelexe_reg.rsc" +"/epoc32/data/z/resource/apps/t_hswidgetmodelexe.rsc" - "c:/resource/apps/t_hswidgetmodelexe.rsc" + +;test providers stubs and manifests +"/epoc32/release/armv5/urel/testwidgetprovider.dll" - "c:/sys/bin/testwidgetprovider.dll" +"./../testwidgetprovider/qmakepluginstubs/testwidgetprovider.qtplugin" - "c:/hsresources/testresources/plugins/widgetproviders/testwidgetprovider.qtplugin" +"./../testwidgetprovider/resource/testwidgetprovider.manifest" - "c:/hsresources/testresources/plugins/widgetproviders/testwidgetprovider.manifest" + +"./../t_hswidgetmodelexe/invalidwidget.manifest" - "c:/hsresources/testresources/invalidwidget.manifest" +"./../t_hswidgetmodelexe/notwellformedwidget.manifest" - "c:/hsresources/testresources/notwellformedwidget.manifest" +"./../t_hswidgetmodelexe/validwidget2.manifest" - "c:/hsresources/testresources/validwidget2.manifest" +"./../t_hswidgetmodelexe/validwidget.manifest" - "c:/hsresources/testresources/validwidget.manifest" + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/sis/t_hswidgetmodel_sisx.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/sis/t_hswidgetmodel_sisx.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off + +if exist t_hswidgetmodel.sisx del t_hswidgetmodel.sisx + +makesis t_hswidgetmodel.pkg +signsis t_hswidgetmodel.sis t_hswidgetmodel.sisx ../../../../bin/sis/rd.cer ../../../../bin/sis/rd-key.pem + +if exist t_hswidgetmodel.sisx ( +echo t_hswidgetmodel.sisx creation SUCCEEDED +del t_hswidgetmodel.sis +) + +if not exist t_hswidgetmodel.sisx ( +echo t_hswidgetmodel.sisx creation FAILED +) \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/decision_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/decision_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,72 @@ +# +# 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: Script for running branch coverage test +# + +# import module +use Getopt::Long; + +# read options +my $make = ""; +my $success = GetOptions ("make=s" => \$make); + +sub printUsage() +{ + print < \$make); + +sub printUsage() +{ + print < +#include "hswidget.h" + +#ifdef Q_OS_SYMBIAN +#include +#endif + + + + + +class TestWidget : public HsWidget +{ + Q_OBJECT + +public: + + TestWidget(QGraphicsItem* aParent = 0, Qt::WindowFlags aFlags = 0) + : HsWidget(aParent, aFlags) {} + +protected: + + StartResult onStart() + { + return mStartResult; + } + + SuspendResult onSuspend() + { + return mSuspendResult; + } + + ResumeResult onResume() + { + return mResumeResult; + } + + StopResult onStop() + { + return mStopResult; + } + +public: + + void setFaultingState() + { + setFaulting(); + } + + void setFaultedState() + { + setFaulted(); + } + + void setFinishedState() + { + setFinished(); + } + +public: + + StartResult mStartResult; + SuspendResult mSuspendResult; + ResumeResult mResumeResult; + StopResult mStopResult; + +}; + +class TestWidget2 : public HsWidget +{ + Q_OBJECT + +public: + + TestWidget2(QGraphicsItem* aParent = 0, Qt::WindowFlags aFlags = 0) + : HsWidget(aParent, aFlags) {} + +protected: + + StartResult onStart() + { + return StartResultFinished; + } + + StopResult onStop() + { + return StopResultFinished; + } + +}; + +class TestWidget3 : public HsWidget +{ + Q_OBJECT + +public: + + TestWidget3(QGraphicsItem* aParent = 0, Qt::WindowFlags aFlags = 0) + : HsWidget(aParent, aFlags) {} + +protected: + + StartResult onStart() + { + return mStartResult; + } + + StopResult onStop() + { + return mStopResult; + } + +public: + + void setFaultingState() + { + setFaulting(); + } + + void setFaultedState() + { + setFaulted(); + } + + void setFinishedState() + { + setFinished(); + } + +public: + + StartResult mStartResult; + StopResult mStopResult; + +}; + + +/** + * @test Test class for hswidgetmodel library. + */ +class TestWidgetModel : public QObject +{ + Q_OBJECT + +private slots: + + /** + * Sets dir for component model's test resources + */ + void initTestCase() + { +#ifdef Q_OS_SYMBIAN + QDir::setCurrent("C:/hsresources/testresources/"); +#endif + } + + + /** + * hswidget.h + */ + void testWidgetInterface(); + void testWidgetConstructor(); + void testWidgetPreferenceService(); + void testWidgetStart_data(); + void testWidgetStart(); + void testWidgetSuspend_data(); + void testWidgetSuspend(); + void testWidgetResume_data(); + void testWidgetResume(); + void testWidgetStop_data(); + void testWidgetStop(); + void testWidgetSetFinished_data(); + void testWidgetSetFinished(); + void testWidgetSetFaulted_data(); + void testWidgetSetFaulted(); + void testWidgetSetFaulting_data(); + void testWidgetSetFaulting(); + + /** + * testwidgetfactory.cpp + */ + + void testCreateWidget(); + + /** + * testwidgetprovidermanifest.cpp + */ + void testWidgetProviderManifest(); + void testWidgetManifests(); + + +}; + + +#endif // HOMESCREEN_TEST_TESTWIDGETMODEL_H diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/installs_win32.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +# +# 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: +# + +testfiles.path = ../../../../bin/hstests/ +testfiles.files = ./debug/t_hswidgetmodelexe.exe \ + ./*.manifest \ + ../../../../bin/debug/hsruntimeservices.dll \ + ../../../../bin/debug/hswidgetmodel.dll + +runtimeservicesdllrelease.path = ./release/ +runtimeservicesdllrelease.files = ../../../../bin/release/hsruntimeservices.dll \ + ../../../../bin/release/hswidgetmodel.dll \ + ./*.manifest + +runtimeservicesdlldebug.path = ./debug/ +runtimeservicesdlldebug.files = ../../../../bin/debug/hsruntimeservices.dll \ + ../../../../bin/debug/hswidgetmodel.dll \ + ./*.manifest + +INSTALLS += testfiles runtimeservicesdllrelease runtimeservicesdlldebug diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/invalidwidget.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/invalidwidget.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,11 @@ + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/notwellformedwidget.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/notwellformedwidget.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + mStartResult = HsWidget::StartResultRunning; + w->mStopResult = HsWidget::StopResultFinished; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + w->start(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->suspend(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->resume(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->stop(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 1); + QCOMPARE(faultedSpy.count(), 0); + stoppedSpy.clear(); + + w->start(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->setFinishedState(); + + QCOMPARE(succeededSpy.count(), 1); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + succeededSpy.clear(); + + w->start(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->setFaultingState(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->setFaultedState(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 1); + + faultedSpy.clear(); +} + + +void TestWidgetModel::testWidgetConstructor() +{ + { + TestWidget w(0); + QVERIFY(!w.widgetPreferenceService()); + } + + { + HsWidget *parent = new TestWidget(0); + QVERIFY(parent); + HsWidget *child = new TestWidget(parent); + QVERIFY(child); + QVERIFY(child->parentItem() == parent); + delete parent; + } +} + + +void TestWidgetModel::testWidgetPreferenceService() +{ + QGraphicsWidget parent; + + HsWidget *w = new TestWidget(&parent); + QObject invalid; + w->setProperty("http://homescreen.nokia.com/runtimeservices/widgetpreferenceservice", qVariantFromValue(&invalid)); + QVERIFY(!w->widgetPreferenceService()); + +} + + +void TestWidgetModel::testWidgetStart_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("startResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Running") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::StartResultRunning + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Running") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::StartResultRunning + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Finished") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFinished + << 1 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFinished + << 1 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Faulted") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Finished -> Faulted") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 1; + + // --- + + QTest::newRow("Running -> Running") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Suspended") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetStart() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, startResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mStartResult = (HsWidget::StartResult)startResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->start(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSuspend_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("suspendResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Running -> Suspended") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidget::SuspendResultSuspended + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Faulted") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Running -> Faulting") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::SuspendResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Suspended") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetSuspend() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, suspendResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mSuspendResult = (HsWidget::SuspendResult)suspendResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->suspend(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetResume_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("resumeResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Suspended -> Running") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::ResumeResultRunning + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Faulted") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Suspended -> Faulting") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::ResumeResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Running") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetResume() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, resumeResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mResumeResult = (HsWidget::ResumeResult)resumeResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->resume(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetStop_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("stopResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Running -> Finished") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFinished + << 0 + << 1 + << 0; + + QTest::newRow("Running -> Finishing") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StopResultFinishing + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Faulted") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Running -> Faulting") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StopResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Suspended -> Finished") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFinished + << 0 + << 1 + << 0; + + QTest::newRow("Suspended -> Finishing") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StopResultFinishing + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Faulted") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Suspended -> Faulting") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StopResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetStop() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, stopResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mStopResult = (HsWidget::StopResult)stopResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->stop(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSetFinished_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Finished") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << 1 + << 0 + << 0; + + QTest::newRow("Suspended -> Finished") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << 1 + << 0 + << 0; + + QTest::newRow("Finishing -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 1 + << 0; + + QTest::newRow("Faulting -> Finished") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; +} + + +void TestWidgetModel::testWidgetSetFinished() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->setFinished(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSetFaulted_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Finished") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; + + QTest::newRow("Suspended -> Finished") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; + + QTest::newRow("Finishing -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; + + QTest::newRow("Faulting -> Finished") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; +} + + +void TestWidgetModel::testWidgetSetFaulted() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->setFaulted(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSetFaulting_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Faulting") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Faulting") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetSetFaulting() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->setFaulting(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidgetfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidgetfactory.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2008 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: Tests for Exception class. +* +*/ + + +#include "testwidgetmodel.h" +#include "hswidgetfactory.h" +#include "hsiwidgetprovider.h" +#include "hswidget.h" + +#include + + + + + + +void TestWidgetModel::testCreateWidget() +{ + + HsWidget* widget = 0; + + HsWidgetFactory factory; + + HsWidgetToken token; +#ifdef Q_OS_SYMBIAN + token.mLibrary = "C:/hsresources/testresources/plugins/widgetproviders/testwidgetprovider.dll"; +#else + token.mLibrary = "plugins/widgetproviders/testwidgetprovider.dll"; +#endif + token.mUri = "homescreen.nokia.com/widget/testwidget"; + + widget = factory.createWidget(token); + QVERIFY(widget); + delete widget; + + token.mUri = "homescreen.nokia.com/widget/notfound"; + widget = factory.createWidget(token); + QVERIFY(!widget); + delete widget; + + token.mLibrary = "notfound"; + widget = factory.createWidget(token); + QVERIFY(!widget); + delete widget; + + HsPluginUnloader loader(0); + QCoreApplication::processEvents(); // for code coverage to catch deleteLater +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidgetmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidgetmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +/* +* 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: Main test class for hspluginmodel library. +* +*/ + + +#include "testwidgetmodel.h" +#include +#include + + + + +QTEST_MAIN(TestWidgetModel) diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidgetprovidermanifest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidgetprovidermanifest.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2008 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: Tests for WidgetBase class. +* +*/ + + +#include "testwidgetmodel.h" +#include "hswidgetprovidermanifest.h" +#include "hsiwidgetprovider.h" + + + + + + +void TestWidgetModel::testWidgetProviderManifest() +{ + + HsWidgetProviderManifest manifest1; + manifest1.loadFromXml("notfound.manifest"); + QVERIFY(manifest1.widgets().count() == 0); + + HsWidgetProviderManifest manifest2; + manifest2.loadFromXml("notwellformedwidget.manifest"); + QVERIFY(manifest2.widgets().count() == 0); + + HsWidgetProviderManifest manifest3; + manifest3.loadFromXml("invalidwidget.manifest"); + QVERIFY(manifest3.widgets().count() == 0); + + HsWidgetProviderManifest manifest4; + manifest4.loadFromXml("validwidget.manifest"); + + QVERIFY(manifest4.loadOnQuery() == false); + QVERIFY(manifest4.widgets().count() > 0); + QList widgets = manifest4.widgets(); + QCOMPARE(widgets.at(0).mLibrary, widgets.at(1).mLibrary); + QVERIFY(widgets.at(0).mUri == "homescreen.nokia.com/widget/testwidget"); + + HsWidgetProviderManifest manifest5; + manifest5.loadFromXml("validwidget2.manifest"); + QVERIFY(manifest5.loadOnQuery() == true); + QVERIFY(manifest5.widgets().count() > 0); + QList widgets5 = manifest5.widgets(); + QVERIFY(widgets5.at(0).mLibrary == "testwidgetprovider.dll"); + QVERIFY(widgets5.at(0).mUri == "homescreen.nokia.com/widget/testwidget"); + +} + +void TestWidgetModel::testWidgetManifests() +{ + HsWidgetProviderManifest manifest; + manifest.loadFromXml("validwidget.manifest"); + QList widgets = manifest.widgets(); + QVERIFY(widgets.count() == 2); +} + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/t_hswidgetmodel.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/t_hswidgetmodel.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,22 @@ +# +# 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: +# + +HEADERS += ./inc/*.h \ + ../../inc/*.h \ + ../../../homescreensrv_plat/hswidgetmodel_api/*.h + +SOURCES += ./src/*.cpp \ + ../../src/*.cpp diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/t_hswidgetmodelexe.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/t_hswidgetmodelexe.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,79 @@ +# +# 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: +# + +TEMPLATE = app + +CONFIG(debug, debug|release) { + DESTDIR = debug +} +else { + DESTDIR = release +} + +CONFIG(debug, debug|release):DESTDIR = debug +else:DESTDIR = release + +CONFIG += debug_and_release \ + console + +CONFIG += hb + +CONFIG += qtestlib + +QT += xml testlib + + +DEFINES += HOMESCREEN_TEST \ + HSWIDGETMODEL_TEST + +DEPENDPATH += . \ + ./inc \ + ./src \ + ../../inc \ + ../../src + +INCLUDEPATH += . \ + ./inc \ + ../../inc \ + ../../../homescreensrv_plat/hswidgetmodel_api \ + ../../../inc \ + ../../../hscontentmodel/inc \ + ../../../hsutils/inc/ + +include(t_hswidgetmodel.pri) + +symbian: { + CONFIG += symbian_test + CONFIG -= hb + load(hb.prf) + CONFIG -= symbian_i18n + + TARGET.UID3 = 0x20022F52 + TARGET.CAPABILITY = CAP_APPLICATION AllFiles + + export.sources = *.manifest + export.path = /hsresources/testresources/ + + exportBinaries.sources = testwidgetprovider.dll \ + + testplugin.pkg_postrules = "\"../testwidgetprovider/qmakepluginstubs/testwidgetprovider.qtplugin"\"" - ""\"!:\hsresources\testresources\plugins\widgetproviders\testwidgetprovider.qtplugin"\" + testplugin.pkg_postrules += "\"../testwidgetprovider/resource/testwidgetprovider.manifest"\"" - ""\"!:\hsresources\testresources\plugins\widgetproviders\testwidgetprovider.manifest"\" + + DEPLOYMENT += export exportBinaries testplugin + +} + +win32:include(installs_win32.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/validwidget.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/validwidget.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,11 @@ + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/validwidget2.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/validwidget2.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/testwidgetprovider/inc/testwidgetprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/testwidgetprovider/inc/testwidgetprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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: +* +*/ + +#ifndef HOMESCREEN_TEST_TESTWIDGETPROVIDER_H +#define HOMESCREEN_TEST_TESTWIDGETPROVIDER_H + +#include "hsiwidgetprovider.h" +#include "hswidget.h" + + + + + + +class TestWidget : public HsWidget +{ + Q_OBJECT + +public: + + TestWidget(QGraphicsItem* aParent = 0, Qt::WindowFlags aFlags = 0) + : HsWidget(aParent, aFlags) {} + +protected: + + StartResult onStart() + { + return StartResultFinished; + } + + StopResult onStop() + { + return StopResultFinished; + } + +}; + + +class TestWidgetProvider : public QObject, public IHsWidgetProvider +{ + + Q_OBJECT + Q_INTERFACES(IHsWidgetProvider) + +public: + + TestWidgetProvider(); + virtual ~TestWidgetProvider(); + +public: + + QList widgets(); + HsWidget* createWidget(const HsWidgetToken& aToken); + +private: + + HsWidgetToken mTestWidgetToken; + +}; + + + + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/testwidgetprovider/resource/testwidgetprovider.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/testwidgetprovider/resource/testwidgetprovider.manifest Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/testwidgetprovider/src/testwidgetprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/testwidgetprovider/src/testwidgetprovider.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,69 @@ +/* +* 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 "testwidgetprovider.h" + + + + + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TestWidgetProvider::TestWidgetProvider() +{ + mTestWidgetToken.mLibrary = QString("testwidgetprovider.dll"); + mTestWidgetToken.mUri = QString("homescreen.nokia.com/widget/testwidget"); + mTestWidgetToken.mTitle = QString("TestWidget"); + mTestWidgetToken.mIconUri = QString("test.png"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TestWidgetProvider::~TestWidgetProvider() +{ + +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +QList TestWidgetProvider::widgets() +{ + return QList() << mTestWidgetToken; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +HsWidget* TestWidgetProvider::createWidget(const HsWidgetToken& aToken) +{ + HsWidget* widget = 0; + + if(aToken.mUri == mTestWidgetToken.mUri) + { + widget = new TestWidget(); + } + + return widget; +} + + +Q_EXPORT_PLUGIN2(testwidgetprovider, TestWidgetProvider) + + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/testwidgetprovider/testwidgetprovider.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/testwidgetprovider/testwidgetprovider.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,23 @@ +# +# 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: +# + + +HEADERS += ./inc/*.h + + + +SOURCES += ./src/*.cpp + diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/testwidgetprovider/testwidgetprovider.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/testwidgetprovider/testwidgetprovider.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,57 @@ +# +# 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: +# + +TEMPLATE = lib +CONFIG(debug, debug|release) { + LIBS += -L../../../../bin/debug -lhswidgetmodel + DESTDIR = debug +} +else { + LIBS += -L../../../../bin/release -lhswidgetmodel + DESTDIR = release +} + +CONFIG += debug_and_release plugin + +CONFIG += hb + +DEPENDPATH += ./inc \ + ./src +INCLUDEPATH += ./inc \ + ../../inc \ + ../../../homescreensrv_plat/hswidgetmodel_api \ + ../t_hswidgetmodelexe/inc \ + ../../../../misc + + +symbian: { + +CONFIG += symbian_test + +TARGET.UID3 = 0x20022F53 +TARGET.EPOCALLOWDLLDATA=1 +TARGET.CAPABILITY = ALL -TCB + +export.sources = resource/*.manifest +export.path = /hsresources/testresources/plugins/widgetproviders +pluginstub.sources = testwidgetprovider.dll +pluginstub.path = /hsresources/testresources/plugins/widgetproviders +DEPLOYMENT += export pluginstub +} + +include(testwidgetprovider.pri) + +win32:include(testwidgetprovider_installs_win32.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/testwidgetprovider/testwidgetprovider_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/testwidgetprovider/testwidgetprovider_installs_win32.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +# +# 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: +# +# +# Release +# + +r01.path = ../t_hswidgetmodelexe/release/plugins/widgetproviders +r01.files = ./release/*.dll + +r02.path = ../t_hswidgetmodelexe/release/plugins/widgetproviders +r02.files = ./resource/*.manifest + +testfiles.path = ../../../../bin/hstests/plugins/widgetproviders +testfiles.files = ./debug/*.dll \ + ./resource/*.manifest + +INSTALLS += r01 r02 testfiles + +# +# Debug +# + +d01.path = ../t_hswidgetmodelexe/debug/plugins/widgetproviders +d01.files = ./debug/*.dll + +d02.path = ../t_hswidgetmodelexe/debug/plugins/widgetproviders +d02.files = ./resource/*.manifest + +INSTALLS += d01 d02 diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,22 @@ +# +# 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: +# + +TEMPLATE = subdirs +SUBDIRS = testwidgetprovider \ + t_hswidgetmodelexe + +CONFIG += ordered + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/backstepping.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/backstepping.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +TEMPLATE = subdirs +symbian { + BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include \"group/bld.inf\"" + } diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/bwins/tsbacksteppingu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/bwins/tsbacksteppingu.def Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,4 @@ +EXPORTS + ??1CTsBacksteppingActivation@@UAE@XZ @ 1 NONAME ; CTsBacksteppingActivation::~CTsBacksteppingActivation(void) + ?NewL@CTsBacksteppingActivation@@SAPAV1@AAVMTsWindowGroupsMonitor@@@Z @ 2 NONAME ; class CTsBacksteppingActivation * CTsBacksteppingActivation::NewL(class MTsWindowGroupsMonitor &) + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/eabi/tsbacksteppingu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/eabi/tsbacksteppingu.def Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,8 @@ +EXPORTS + _ZN25CTsBacksteppingActivation4NewLER22MTsWindowGroupsMonitor @ 1 NONAME + _ZN25CTsBacksteppingActivationD0Ev @ 2 NONAME + _ZN25CTsBacksteppingActivationD1Ev @ 3 NONAME + _ZN25CTsBacksteppingActivationD2Ev @ 4 NONAME + _ZTI25CTsBacksteppingActivation @ 5 NONAME + _ZTV25CTsBacksteppingActivation @ 6 NONAME + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/group/bld.inf Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +/* +* 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: +* +*/ +PRJ_PLATFORMS +DEFAULT + +PRJ_MMPFILES +tsbackstepping.mmp diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/group/tsbackstepping.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/group/tsbackstepping.mmp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +/* +* 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: +* +*/ + +TARGET tsbackstepping.dll +TARGETTYPE dll +UID 0x1000008d 0x200267AD +SECUREID 0x200267AD +CAPABILITY ALL -TCB + +EPOCHEAPSIZE 0x100000 0x600000 // 1MB - 6MB + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc +USERINCLUDE ../../../inc + +SOURCEPATH ../src +SOURCE tsbackstepping.cpp +SOURCE tsbacksteppingfilter.cpp +SOURCE tsbacksteppingactivation.cpp + +LIBRARY euser.lib +LIBRARY ws32.lib // for RWsSession +LIBRARY apgrfx.lib // for TApaTask / TApaTasksList +LIBRARY tsutils.lib +LIBRARY afactivitylauncher.lib + +DEBUGLIBRARY flogger.lib diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/inc/tsbackstepping.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/inc/tsbackstepping.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +/* +* 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: +* +*/ + +#ifndef __CBACKSTEPPING_H +#define __CBACKSTEPPING_H + +#include +#include + +class CTsBacksteppingFilter; + +NONSHARABLE_CLASS(CTsBackstepping) : public CTsWindowGroupsObserver +{ +public: + static CTsBackstepping* NewL(MTsWindowGroupsMonitor &); + static CTsBackstepping* NewLC(MTsWindowGroupsMonitor &); + virtual ~CTsBackstepping(); + +private: + CTsBackstepping(MTsWindowGroupsMonitor &); + void ConstructL(); + + void HandleWindowGroupChanged(MTsResourceManager &, + const TArray &); + + void HandleWindowGroupChangedL(MTsResourceManager &, + const TArray &); + TInt homescreenOffsetL(MTsResourceManager &, + const TArray &) const; + + TInt parentOffsetL(TInt, const TArray &) const; + + inline TBool isEmbededApp(const RWsSession::TWindowGroupChainInfo&) const; + + TUid getUidFromWindowGroupL(MTsResourceManager &resources, TInt windowGroupId) const; + +private: + CTsBacksteppingFilter *mFilter; +}; + +#endif // __CBACKSTEPPING_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/inc/tsbacksteppingactivation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/inc/tsbacksteppingactivation.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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: +* +*/ + +#ifndef CTSBACKSTEPPINGWAITINGDLE_H +#define CTSBACKSTEPPINGWAITINGDLE_H + +#include +#include + +class MTsWindowGroupsMonitor; + + +class CTsBacksteppingActivation : public CActive + { +public: + /** + * Two-phased constructor. + * @param aPriority priority for the timer. + * @return new instance of CTeleWaitingIdle. + */ + IMPORT_C static CTsBacksteppingActivation* NewL(MTsWindowGroupsMonitor &monitor); + /** + * destructor + */ + IMPORT_C virtual ~CTsBacksteppingActivation(); + +protected: + /** + * @see CActive. + */ + void RunL(); + + /** + * @see CActive::RunError(TInt) + */ + TInt RunError(TInt); + + /** + * @see CActive. + */ + void DoCancel(); + +private: + /** + * constructor. + * @return new instance of CTeleWaitingIdle. + */ + CTsBacksteppingActivation(MTsWindowGroupsMonitor &monitor); + + void ConstructL(); + + void Subscribe(); + +private: + MTsWindowGroupsMonitor &mMonitor; + + // Central Repository. + RProperty mProperty; + + // Backstepping engine. Own + CBase* mEngine; + }; + +#endif /* CTSBACKSTEPPINGWAITINGDLE_H */ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/inc/tsbacksteppingfilter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/inc/tsbacksteppingfilter.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +/* +* 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: +* +*/ + +#ifndef TSBACKSTEPPINGFILTER_H +#define TSBACKSTEPPINGFILTER_H + +#include +#include + + +NONSHARABLE_CLASS(CTsBacksteppingFilter) : public CBase +{ +public: + static CTsBacksteppingFilter* NewL(); + ~CTsBacksteppingFilter(); + + TBool isBlocked(TUid applicationUid) const; + +private: + CTsBacksteppingFilter(); + void ConstructL(); + +private: + RArray mBlockedApps; + +}; + +#endif // TSBACKSTEPPINGFILTER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/src/tsbackstepping.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/src/tsbackstepping.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,196 @@ +/* +* 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 "tsbackstepping.h" + +#include // key event +#include // for CApaWindowGroupName +#include +#include +#include + +#include +#include + +#include "tsbacksteppingfilter.h" + +_LIT(KHsActivactionUri, "appto://20022F35?activityname=HsIdleView&activityinbackground=true"); + +/** + * CTsBackstepping::NewL + * two phase constructor + */ +CTsBackstepping* CTsBackstepping::NewL(MTsWindowGroupsMonitor &monitor) + { + CTsBackstepping* self = CTsBackstepping::NewLC(monitor); + CleanupStack::Pop(self); + return self; + } + +/** + * CTsBackstepping::NewLC + * two phase constructor + */ +CTsBackstepping* CTsBackstepping::NewLC(MTsWindowGroupsMonitor &monitor) +{ + CTsBackstepping* self = new (ELeave) CTsBackstepping(monitor); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +/** + * CTsBackstepping::CTsBackstepping + * constructor + */ +CTsBackstepping::CTsBackstepping(MTsWindowGroupsMonitor &monitor) +: +CTsWindowGroupsObserver(monitor) +{ +} + +/** + * CTsBackstepping::~CTsBackstepping + * deconstructor + */ +CTsBackstepping::~CTsBackstepping() +{ + delete mFilter; +} + +/** + * CTsBackstepping::ConstructL + * two phase constructor + */ +void CTsBackstepping::ConstructL () +{ + BaseConstructL(); + mFilter = CTsBacksteppingFilter::NewL(); +} + +/** + * CTsBackstepping::AnalyseWindowStackL + * Analyzes window stack and move homescreen to proper position + */ +void CTsBackstepping::HandleWindowGroupChanged(MTsResourceManager &resource, const TArray &windowGroups) +{ + TRAP_IGNORE(HandleWindowGroupChangedL(resource, windowGroups)); +} + +/** + * CTsBackstepping::AnalyseWindowStackL + * Analyzes window stack and move homescreen to proper position + */ +void CTsBackstepping::HandleWindowGroupChangedL(MTsResourceManager &resource, + const TArray &windowGroups) +{ + // calculate the desired position of Homescreen + const TInt currentHsOffset(homescreenOffsetL(resource, windowGroups)); + TInt optimalOffset(1); + TInt targetHsOffset(currentHsOffset); + for (TInt offset(0); offset < currentHsOffset; ++offset) { + TUid uid = getUidFromWindowGroupL(resource, windowGroups[offset].iId); + if (TUid::Null() != uid) { + if (isEmbededApp(windowGroups[offset])) { + targetHsOffset = parentOffsetL(offset, windowGroups) + 1; + } else if (!mFilter->isBlocked(uid)) { + if(offset + 1 < currentHsOffset && + getUidFromWindowGroupL(resource, windowGroups[offset+1].iId) == TUid::Null()) { + ++optimalOffset; + } + targetHsOffset = optimalOffset; + } + break; + } else { + ++optimalOffset; + } + } + + // change windows order if necessary + if (targetHsOffset != currentHsOffset) { + const TInt hsWindowGroup(windowGroups[currentHsOffset].iId); + resource.WsSession().SetWindowGroupOrdinalPosition(hsWindowGroup, targetHsOffset); + } + + // switch Homescreen to Idle state if Homescreen is not in foreground and is in different state + if (targetHsOffset != 0) { + TInt hsState(EHomeScreenIdleState); + User::LeaveIfError(RProperty::Get(KHsCategoryUid, KHsCategoryStateKey, hsState)); + if (hsState != EHomeScreenIdleState) { + CAfActivityLauncher *activityEnabler = + CAfActivityLauncher::NewLC(resource.ApaSession(), + resource.WsSession()); + activityEnabler->launchActivityL(KHsActivactionUri); + CleanupStack::PopAndDestroy(activityEnabler); + } + } +} + +/** + * CTsBackstepping::homescreenOffsetL + */ +TInt CTsBackstepping::homescreenOffsetL(MTsResourceManager &resource, + const TArray &windowGroups) const +{ + TInt offset(KErrNotFound); + for (TInt iter(0);KErrNotFound == offset && iter < windowGroups.Count(); ++iter) { + if (KHsCategoryUid == getUidFromWindowGroupL(resource, windowGroups[iter].iId)) { + offset = iter; + } + } + User::LeaveIfError(offset); + return offset; +} + +/** + * CTsBackstepping::homescreenOffsetL + */ +TInt CTsBackstepping::parentOffsetL(TInt offset, + const TArray &windowGroups) const +{ + for(TInt iter(offset + 1); iter < windowGroups.Count(); ++iter) { + if(windowGroups[iter].iId == windowGroups[offset].iParentId) { + return isEmbededApp(windowGroups[iter]) ? + parentOffsetL(iter, windowGroups) : iter; + } + } + User::Leave(KErrNotFound); + return KErrNotFound; +} + +/** + * CTsBackstepping::isEmbededApp + */ +TBool CTsBackstepping::isEmbededApp(const RWsSession::TWindowGroupChainInfo &windowGroupInfo) const +{ + return 0 < windowGroupInfo.iParentId; +} + +/** + * CTsBackstepping::getUidFromWindowGroupL + */ +TUid CTsBackstepping::getUidFromWindowGroupL(MTsResourceManager &resource, TInt windowGroupId) const +{ + TUid retVal(TUid::Null()); + CApaWindowGroupName *windowGroupName = CApaWindowGroupName::NewLC(resource.WsSession()); + windowGroupName->ConstructFromWgIdL(windowGroupId); + retVal = windowGroupName->AppUid(); + CleanupStack::PopAndDestroy(windowGroupName); + return retVal; +} + +// end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/src/tsbacksteppingactivation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/src/tsbacksteppingactivation.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,135 @@ +/* +* 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 +#include +#include + +#include "tsbacksteppingactivation.h" +#include "tsbackstepping.h" + + // ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CBacksteppingActivation::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CTsBacksteppingActivation* CTsBacksteppingActivation::NewL(MTsWindowGroupsMonitor &monitor) +{ + CTsBacksteppingActivation* self = new( ELeave ) CTsBacksteppingActivation(monitor); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +// CTsBacksteppingActivation::CTsBacksteppingActivation +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CTsBacksteppingActivation::CTsBacksteppingActivation(MTsWindowGroupsMonitor &monitor) +: + CActive(EPriorityLow), + mMonitor(monitor) +{ + CActiveScheduler::Add(this); +} + +// ----------------------------------------------------------------------------- +// CTsBacksteppingActivation::ConstructL() +// ----------------------------------------------------------------------------- +// +void CTsBacksteppingActivation::ConstructL() +{ + User::LeaveIfError(mProperty.Attach(KPSUidStartup, KPSIdlePhase1Ok)); + iStatus = KRequestPending; + SetActive(); + TRequestStatus* status(&iStatus); + User::RequestComplete(status, KErrNone); +} + +// ----------------------------------------------------------------------------- +// CTsBacksteppingActivation::~CTsBacksteppingActivation +// Destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CTsBacksteppingActivation::~CTsBacksteppingActivation() +{ + Cancel(); + delete mEngine; + mProperty.Close(); +} + +// ----------------------------------------------------------------------------- +// CBacksteppingActivation::DoCancel +// +// ----------------------------------------------------------------------------- +// +void CTsBacksteppingActivation::DoCancel() +{ + if ( IsActive() && mProperty.Handle() ) { + mProperty.Cancel(); + } +} + +// ----------------------------------------------------------------------------- +// CBacksteppingActivation::RunL +// +// ----------------------------------------------------------------------------- +// +void CTsBacksteppingActivation::RunL() +{ + User::LeaveIfError(iStatus.Int()); + + TInt state(~EIdlePhase1Ok); + User::LeaveIfError(mProperty.Get(state)); + + if (EIdlePhase1Ok == state) { + if (0 == mEngine) { + mEngine = CTsBackstepping::NewL(mMonitor); + } + } else { + delete mEngine; + mEngine = 0; + } + Subscribe(); +} + +// ----------------------------------------------------------------------------- +// CBacksteppingActivation::RunError +// +// ----------------------------------------------------------------------------- +// +TInt CTsBacksteppingActivation::RunError(TInt error) +{ + if (KErrCancel != error) { + Subscribe(); + } + return KErrNone; +} + +// ----------------------------------------------------------------------------- +// CBacksteppingActivation::Subscribe +// +// ----------------------------------------------------------------------------- +// +void CTsBacksteppingActivation::Subscribe() +{ + mProperty.Subscribe(iStatus); + SetActive(); +} +// end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/src/tsbacksteppingfilter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/src/tsbacksteppingfilter.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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 "tsbacksteppingfilter.h" + +const TInt KBlockedApps [] = {0x100058b3/* <-- phoneui.exe */}; + +/** + * CTsBacksteppingFilter::NewL + */ +CTsBacksteppingFilter* CTsBacksteppingFilter::NewL() +{ + CTsBacksteppingFilter *self = new(ELeave)CTsBacksteppingFilter(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +/** + * CTsBacksteppingFilter::~CTsBacksteppingFilter + */ +CTsBacksteppingFilter::~CTsBacksteppingFilter() +{ + mBlockedApps.Close(); +} + +/** + * CTsBacksteppingFilter::isBlocked + */ +TBool CTsBacksteppingFilter::isBlocked(TUid applicationUid) const +{ + return KErrNotFound != mBlockedApps.Find(applicationUid); +} + +/** + * CTsBacksteppingFilter::CTsBacksteppingFilter + */ +CTsBacksteppingFilter::CTsBacksteppingFilter() +{ +} + +/** + * CTsBacksteppingFilter::ConstructL + */ +void CTsBacksteppingFilter::ConstructL() +{ + const TInt count(sizeof(KBlockedApps) / sizeof(TInt)); + for(TInt offset(0);offset < count; ++offset) { + mBlockedApps.AppendL(TUid::Uid(KBlockedApps[offset])); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,109 @@ +/** 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "t_tsbackstepping.h" +#include "tsbackstepping.h" +#include +#include + +#include "tstestutils.h" + +const TUid KIconApplicationUid = {0xEd0b4e47}; +const TUid KNoIconApplicationUid = {0xE453fc1b}; +const TUid KHsApplicationUid = {0x20022F35}; + +namespace { + const char KIconApplicationName[] = "appwithicon"; + const char KNoIconApplicationName[] = "appwithouticon"; +} + +// ----------------------------------------------------------------------------- +// init and cleanup methods +// ----------------------------------------------------------------------------- +// +void TestBackStepping::initTestCase() +{ + mResources = CTsResourceManager::NewL(); + mMonitor = CTsWindowGroupsMonitor::NewL(*mResources); +} + +void TestBackStepping::cleanupTestCase() +{ + delete mMonitor; + delete mResources; +} + +// ----------------------------------------------------------------------------- +// test cases +// ----------------------------------------------------------------------------- +// +void TestBackStepping::testBacksteppingMovesHomescreenToSecondPosition() +{ + // start test applicationss + quint64 iconAppId; + quint64 noIconAppId; + QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId)); + QVERIFY(TsTestUtils::startApplication(KNoIconApplicationName, noIconAppId)); + + // get window group list that will be passed to backstepping algorithm + RArray windowGroupList; + QCOMPARE(mResources->WsSession().WindowGroupList(0, &windowGroupList), KErrNone); + + // we don't test window server events monitor. manually force backstepping algorithm + CTsBackstepping *backstepping = CTsBackstepping::NewL(*mMonitor); + static_cast(backstepping)->HandleWindowGroupChanged(*mResources, windowGroupList.Array()); + + // read window group list list after backstepping + QCOMPARE(mResources->WsSession().WindowGroupList(0, &windowGroupList), KErrNone); + + QCOMPARE(getUidForWgId(windowGroupList[0].iId), KNoIconApplicationUid); + QCOMPARE(getUidForWgId(windowGroupList[1].iId), KHsApplicationUid); + QCOMPARE(getUidForWgId(windowGroupList[2].iId), KIconApplicationUid); + + delete backstepping; + windowGroupList.Close(); + + // close test applications + QVERIFY(TsTestUtils::closeApplication(noIconAppId)); + QVERIFY(TsTestUtils::closeApplication(iconAppId)); +} + +// ----------------------------------------------------------------------------- +// helper method +// ----------------------------------------------------------------------------- +// +TUid TestBackStepping::getUidForWgId(int wgId) const +{ + CApaWindowGroupName *windowName = CApaWindowGroupName::NewLC(mResources->WsSession(), wgId); + TUid appUid = windowName->AppUid(); + CleanupStack::PopAndDestroy(windowName); + return appUid; +} + +QTEST_MAIN(TestBackStepping) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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 +#include + +class CTsResourceManager; +class CTsWindowGroupsMonitor; + +class TestBackStepping : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + + void testBacksteppingMovesHomescreenToSecondPosition(); + +private: + TUid getUidForWgId(int wgId) const; + +public: + CTsResourceManager *mResources; + CTsWindowGroupsMonitor *mMonitor; +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +# +# 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: +# + +CONFIG += qtestlib console + +INCLUDEPATH += ../../../../inc + +HEADERS += t_tsbackstepping.h +SOURCES += t_tsbackstepping.cpp + +HEADERS += ../../inc/tsbackstepping.h \ + ../../inc/tsbacksteppingfilter.h \ + +SOURCES += ../../src/tsbackstepping.cpp \ + ../../src/tsbacksteppingfilter.cpp \ + +LIBS += -lestor.dll +LIBS += -lapparc.dll +LIBS += -lfbscli.dll +LIBS += -lbitgdi.dll +LIBS += -laknicon.dll + +LIBS += -leuser.dll +LIBS += -lws32.dll #// for RWsSession +LIBS += -lapgrfx.dll #// for TApaTask / TApaTasksList +LIBS += -ltsutils.dll +LIBS += -lafactivitylauncher + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils + +symbian { +CONFIG += symbian_test +coverage: CONFIG -= symbian_test +TARGET.CAPABILITY = ALL -TCB +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/backstepping/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/backstepping/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,22 @@ +# +# 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: +# + +TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS += ../../../internal/tsapps/testapp +SUBDIRS += t_tsbackstepping + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/bwins/tstaskmonitorclientu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/bwins/tstaskmonitorclientu.def Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +EXPORTS + ?taskListChanged@TsTaskMonitor@@IAEXXZ @ 1 NONAME ; void TsTaskMonitor::taskListChanged(void) + ?close@TsTask@@QAEXXZ @ 2 NONAME ; void TsTask::close(void) + ?SetVisibility@CTsScreenshotClient@@QAEHHW4Visibility@@@Z @ 3 NONAME ; int CTsScreenshotClient::SetVisibility(int, enum Visibility) + ?tr@TsTaskMonitor@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString TsTaskMonitor::tr(char const *, char const *) + ?oldOffset@TsTaskChangeInfo@@QBEHXZ @ 5 NONAME ; int TsTaskChangeInfo::oldOffset(void) const + ?name@TsTask@@QBE?AVQString@@XZ @ 6 NONAME ; class QString TsTask::name(void) const + ?isClosable@TsTask@@QBE_NXZ @ 7 NONAME ; bool TsTask::isClosable(void) const + ?changeType@TsTaskChangeInfo@@QBE?AW4ChangeType@1@XZ @ 8 NONAME ; enum TsTaskChangeInfo::ChangeType TsTaskChangeInfo::changeType(void) const + ??0TsTaskMonitor@@QAE@PAVQObject@@@Z @ 9 NONAME ; TsTaskMonitor::TsTaskMonitor(class QObject *) + ?qt_metacall@TsTaskMonitor@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int TsTaskMonitor::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@TsTaskMonitor@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString TsTaskMonitor::trUtf8(char const *, char const *) + ?staticMetaObject@TsTaskMonitor@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const TsTaskMonitor::staticMetaObject + ?RegisterScreenshot@CTsScreenshotClient@@QAEHPAVCFbsBitmap@@HW4UpdatePriority@@@Z @ 13 NONAME ; int CTsScreenshotClient::RegisterScreenshot(class CFbsBitmap *, int, enum UpdatePriority) + ?UnregisterScreenshot@CTsScreenshotClient@@QAEHH@Z @ 14 NONAME ; int CTsScreenshotClient::UnregisterScreenshot(int) + ?changeList@TsTaskMonitor@@QAE?AV?$QList@U?$QPair@VTsTaskChangeInfo@@V?$QSharedPointer@VTsTask@@@@@@@@_N@Z @ 15 NONAME ; class QList > > TsTaskMonitor::changeList(bool) + ??1CTsScreenshotClient@@UAE@XZ @ 16 NONAME ; CTsScreenshotClient::~CTsScreenshotClient(void) + ?NewLC@CTsScreenshotClient@@SAPAV1@XZ @ 17 NONAME ; class CTsScreenshotClient * CTsScreenshotClient::NewLC(void) + ??_ETsTaskMonitor@@UAE@I@Z @ 18 NONAME ; TsTaskMonitor::~TsTaskMonitor(unsigned int) + ?getStaticMetaObject@TsTaskMonitor@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & TsTaskMonitor::getStaticMetaObject(void) + ?metaObject@TsTaskMonitor@@UBEPBUQMetaObject@@XZ @ 20 NONAME ; struct QMetaObject const * TsTaskMonitor::metaObject(void) const + ?registerScreenshot@TsTaskSettings@@QAE_NABVQPixmap@@@Z @ 21 NONAME ; bool TsTaskSettings::registerScreenshot(class QPixmap const &) + ?NewL@CTsScreenshotClient@@SAPAV1@XZ @ 22 NONAME ; class CTsScreenshotClient * CTsScreenshotClient::NewL(void) + ??1TsTaskSettings@@QAE@XZ @ 23 NONAME ; TsTaskSettings::~TsTaskSettings(void) + ?qt_metacast@TsTaskMonitor@@UAEPAXPBD@Z @ 24 NONAME ; void * TsTaskMonitor::qt_metacast(char const *) + ?open@TsTask@@QAEXXZ @ 25 NONAME ; void TsTask::open(void) + ?trUtf8@TsTaskMonitor@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString TsTaskMonitor::trUtf8(char const *, char const *, int) + ??1TsTaskMonitor@@UAE@XZ @ 27 NONAME ; TsTaskMonitor::~TsTaskMonitor(void) + ??0TsTaskChangeInfo@@QAE@HH@Z @ 28 NONAME ; TsTaskChangeInfo::TsTaskChangeInfo(int, int) + ??0TsTaskSettings@@QAE@XZ @ 29 NONAME ; TsTaskSettings::TsTaskSettings(void) + ?screenshot@TsTask@@QBE?AVQPixmap@@XZ @ 30 NONAME ; class QPixmap TsTask::screenshot(void) const + ?newOffset@TsTaskChangeInfo@@QBEHXZ @ 31 NONAME ; int TsTaskChangeInfo::newOffset(void) const + ?unregisterScreenshot@TsTaskSettings@@QAE_NXZ @ 32 NONAME ; bool TsTaskSettings::unregisterScreenshot(void) + ?isActive@TsTask@@QBE_NXZ @ 33 NONAME ; bool TsTask::isActive(void) const + ??1TsTask@@QAE@XZ @ 34 NONAME ; TsTask::~TsTask(void) + ?setVisibility@TsTaskSettings@@QAE_N_N@Z @ 35 NONAME ; bool TsTaskSettings::setVisibility(bool) + ?tr@TsTaskMonitor@@SA?AVQString@@PBD0H@Z @ 36 NONAME ; class QString TsTaskMonitor::tr(char const *, char const *, int) + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/client.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/client.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,78 @@ +# +# 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: +# + +INCLUDEPATH += $$PWD/inc + +HEADERS += $$PWD/inc/tstaskmonitor.h \ + $$PWD/inc/tstask.h \ + $$PWD/inc/tstasklauncher.h \ + $$PWD/inc/tstaskcontent.h \ + $$PWD/inc/tstaskchangeinfo.h + +SOURCES += $$PWD/src/tstaskmonitor.cpp \ + $$PWD/src/tstask.cpp \ + $$PWD/src/tstaskchangeinfo.cpp \ + +symbian { + INCLUDEPATH += $$PWD/s60/inc \ + $$PWD/../inc \ + $$PWD/../utils/inc \ + $$PWD/../../inc \ + + HEADERS += $$PWD/s60/inc/tstaskmonitorobserver.h \ + $$PWD/s60/inc/tstaskmonitorclient.h \ + $$PWD/s60/inc/tstaskmonitorclientimpl.h \ + $$PWD/s60/inc/tssession.h \ + $$PWD/../utils/inc/tsentry.h \ + $$PWD/../utils/inc/tsentrykey.h \ + $$PWD/../utils/inc/tsutils.h \ + $$PWD/../utils/inc/tsscreenshotmsg.h \ + $$PWD/../utils/inc/tsunregscreenshotmsg.h \ + $$PWD/../utils/inc/tsvisibilitymsg.h \ + $$PWD/s60/inc/tstaskmonitor_p.h \ + $$PWD/s60/inc/tsscreenshotclient.h \ + $$PWD/s60/inc/tsscreenshotclientimpl.h \ + $$PWD/s60/inc/tstasksettings_p.h \ + $$PWD/../../homescreensrv_plat/taskswitcher_api/tstasksettings.h \ + + SOURCES += $$PWD/s60/src/tstaskmonitorclient.cpp \ + $$PWD/s60/src/tstaskmonitorclientimpl.cpp \ + $$PWD/s60/src/tssession.cpp \ + $$PWD/../utils/src/tsentry.cpp \ + $$PWD/../utils/src/tsentrykey.cpp \ + $$PWD/../utils/src/tsscreenshotmsg.cpp \ + $$PWD/../utils/src/tsunregscreenshotmsg.cpp \ + $$PWD/../utils/src/tsvisibilitymsg.cpp \ + $$PWD/s60/src/tstaskmonitor_p.cpp \ + $$PWD/s60/src/tsscreenshotclient.cpp \ + $$PWD/s60/src/tsscreenshotclientimpl.cpp \ + $$PWD/src/tstasksettings.cpp \ + $$PWD/s60/src/tstasksettings_p.cpp \ + + LIBS += -lxqutils \ + -lestor \ + -lfbscli + +} else { + INCLUDEPATH += $$PWD/stub/inc \ + + HEADERS += $$PWD/stub/inc/tstaskmonitor_p.h \ + $$PWD/stub/inc/tstasksettings_p.h \ + + SOURCES += $$PWD/stub/src/tstaskmonitor_p.cpp \ + $$PWD/stub/src/tstasksettings_p.cpp \ + +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/client.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/client.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = lib +TARGET = tstaskmonitorclient + +CONFIG += dll + +DEFINES += TSTASKMONITOR_LIB + +symbian { + dll.sources = tstaskmonitorclient.dll + dll.path = $$SHARED_LIB_DIR + DEPLOYMENT += dll + LIBS += -ltsutils -lws32 -lapgrfx -lcone + + BLD_INF_RULES.prj_exports += "inc/tstaskmonitor.h |../../inc/tstaskmonitor.h" \ + "inc/tstask.h |../../inc/tstask.h" \ + "inc/tstaskchangeinfo.h |../../inc/tstaskchangeinfo.h" \ + + TARGET.UID3 = 0x200267AF + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA = 1 + +} + +include(client.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/eabi/tstaskmonitorclientu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/eabi/tstaskmonitorclientu.def Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +EXPORTS + _ZN13TsTaskMonitor10changeListEb @ 1 NONAME + _ZN13TsTaskMonitor11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME + _ZN13TsTaskMonitor11qt_metacastEPKc @ 3 NONAME + _ZN13TsTaskMonitor15taskListChangedEv @ 4 NONAME + _ZN13TsTaskMonitor16staticMetaObjectE @ 5 NONAME DATA 16 + _ZN13TsTaskMonitor19getStaticMetaObjectEv @ 6 NONAME + _ZN13TsTaskMonitorC1EP7QObject @ 7 NONAME + _ZN13TsTaskMonitorC2EP7QObject @ 8 NONAME + _ZN13TsTaskMonitorD0Ev @ 9 NONAME + _ZN13TsTaskMonitorD1Ev @ 10 NONAME + _ZN13TsTaskMonitorD2Ev @ 11 NONAME + _ZN14TsTaskSettings13setVisibilityEb @ 12 NONAME + _ZN14TsTaskSettings18registerScreenshotERK7QPixmap @ 13 NONAME + _ZN14TsTaskSettings20unregisterScreenshotEv @ 14 NONAME + _ZN14TsTaskSettingsC1Ev @ 15 NONAME + _ZN14TsTaskSettingsC2Ev @ 16 NONAME + _ZN14TsTaskSettingsD1Ev @ 17 NONAME + _ZN14TsTaskSettingsD2Ev @ 18 NONAME + _ZN16TsTaskChangeInfoC1Eii @ 19 NONAME + _ZN16TsTaskChangeInfoC2Eii @ 20 NONAME + _ZN19CTsScreenshotClient13SetVisibilityEi10Visibility @ 21 NONAME + _ZN19CTsScreenshotClient18RegisterScreenshotEP10CFbsBitmapi14UpdatePriority @ 22 NONAME + _ZN19CTsScreenshotClient20UnregisterScreenshotEi @ 23 NONAME + _ZN19CTsScreenshotClient4NewLEv @ 24 NONAME + _ZN19CTsScreenshotClient5NewLCEv @ 25 NONAME + _ZN19CTsScreenshotClientD0Ev @ 26 NONAME + _ZN19CTsScreenshotClientD1Ev @ 27 NONAME + _ZN19CTsScreenshotClientD2Ev @ 28 NONAME + _ZN6TsTask4openEv @ 29 NONAME + _ZN6TsTask5closeEv @ 30 NONAME + _ZN6TsTaskD1Ev @ 31 NONAME + _ZN6TsTaskD2Ev @ 32 NONAME + _ZNK13TsTaskMonitor10metaObjectEv @ 33 NONAME + _ZNK16TsTaskChangeInfo10changeTypeEv @ 34 NONAME + _ZNK16TsTaskChangeInfo9newOffsetEv @ 35 NONAME + _ZNK16TsTaskChangeInfo9oldOffsetEv @ 36 NONAME + _ZNK6TsTask10isClosableEv @ 37 NONAME + _ZNK6TsTask10screenshotEv @ 38 NONAME + _ZNK6TsTask4nameEv @ 39 NONAME + _ZNK6TsTask8isActiveEv @ 40 NONAME + _ZTI13TsTaskMonitor @ 41 NONAME + _ZTV13TsTaskMonitor @ 42 NONAME + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/inc/tstask.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/inc/tstask.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ +#ifndef TSTASK_H +#define TSTASK_H + +#include +#include + +#include "tstaskmonitor_global.h" + +class TsTaskContent; +class TsTaskLauncher; + +class TsTask +{ + +public: + TsTask(TsTaskContent *content, TsTaskLauncher &launcher); + TSTASKMONITOR_EXPORT ~TsTask(); + + TSTASKMONITOR_EXPORT void open(); + TSTASKMONITOR_EXPORT void close(); + + TSTASKMONITOR_EXPORT bool isClosable() const; + TSTASKMONITOR_EXPORT bool isActive() const; + TSTASKMONITOR_EXPORT QPixmap screenshot() const; + TSTASKMONITOR_EXPORT QString name() const; + +private: + const TsTaskContent *const mContent; + TsTaskLauncher &mLauncher; + +}; + +#endif //TSTASK_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/inc/tstaskchangeinfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/inc/tstaskchangeinfo.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef TSTASKCHANGEINFO_H +#define TSTASKCHANGEINFO_H + +#include "tstaskmonitor_global.h" + +class TSTASKMONITOR_EXPORT TsTaskChangeInfo +{ +public: + enum ChangeType{ + EChangeInsert, + EChangeDelete, + EChangeMove, + EChangeUpdate, + EChangeCancel + }; + static const int KInvalidOffset = -2; + + TsTaskChangeInfo(int newOffset = KInvalidOffset, int oldOffset = KInvalidOffset); + + int newOffset() const; + int oldOffset() const; + ChangeType changeType() const; + +private: + int mNewOffset; + int mOldOffset; + +}; + +#endif /* TSTASKCHANGEINFO_H */ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/inc/tstaskcontent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/inc/tstaskcontent.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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: +* +*/ +#ifndef TSTASKCONTENT_H +#define TSTASKCONTENT_H + +class TsTaskContent +{ + +public: + bool mClosable; + bool mActive; + QPixmap mScreenshot; + QString mName; + QByteArray mKey; + +}; + +#endif //TSTASKCONTENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/inc/tstasklauncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/inc/tstasklauncher.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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: +* +*/ +#ifndef TSTASKLAUNCHER_H +#define TSTASKLAUNCHER_H + +class QByteArray; + +class TsTaskLauncher { + +public: + virtual void openTask(const QByteArray &key) = 0; + virtual void closeTask(const QByteArray &key) = 0; +}; + +#endif //TSTASKLAUNCHER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/inc/tstaskmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/inc/tstaskmonitor.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ +#ifndef TSTASKMONITOR_H +#define TSTASKMONITOR_H + +#include +#include +#include + +#include "tstaskmonitor_global.h" +#include "tstask.h" + +class TsTaskMonitorPrivate; +class TsTaskChangeInfo; + +typedef QPair > TsTaskChange; + +class TSTASKMONITOR_EXPORT TsTaskMonitor : public QObject +{ + Q_OBJECT + +public: + TsTaskMonitor(QObject *parent = 0); + ~TsTaskMonitor(); + QList changeList(bool fullList = false); //TODO merge these functions with bool + +signals: + void taskListChanged(); + +private: + TsTaskMonitorPrivate *d_ptr; + friend class TsTaskMonitorPrivate; +}; + +#endif //TSTASKMONITOR_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tsscreenshotclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tsscreenshotclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ +#ifndef TSSCREENSHOTCLIENT_H +#define TSSCREENSHOTCLIENT_H + +#include + +#include "tstaskmonitorglobals.h" + +class CFbsBitmap; +class CTsScreenshotClientImpl; + +NONSHARABLE_CLASS( CTsScreenshotClient ) : public CBase +{ +public: + IMPORT_C static CTsScreenshotClient* NewL(); + IMPORT_C static CTsScreenshotClient* NewLC(); + IMPORT_C ~CTsScreenshotClient(); + +public: + IMPORT_C TInt RegisterScreenshot(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority = Normal); + IMPORT_C TInt UnregisterScreenshot(TInt wgId); + IMPORT_C TInt SetVisibility(TInt wgId, Visibility value); + +private: + CTsScreenshotClient(); + void ConstructL(); + +private: + CTsScreenshotClientImpl* iImpl; +}; + +#endif // TSSCREENSHOTCLIENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tsscreenshotclientimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tsscreenshotclientimpl.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef TSSCREENSHOTCLIENTIMPL_H +#define TSSCREENSHOTCLIENTIMPL_H + +#include + +#include "tstaskmonitorglobals.h" +#include "tssession.h" + +class CFbsBitmap; + +NONSHARABLE_CLASS( CTsScreenshotClientImpl ) : public CBase +{ +public: + static CTsScreenshotClientImpl* NewL(); + static CTsScreenshotClientImpl* NewLC(); + ~CTsScreenshotClientImpl(); + +public: + TInt RegisterScreenshot(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority); + TInt UnregisterScreenshot(TInt wgId); + TInt SetVisibility(TInt wgId, Visibility value); + +private: + CTsScreenshotClientImpl(); + void ConstructL(); + + RTsSession iSession; +}; + +#endif // TSSCREENSHOTCLIENTIMPL_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tssession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tssession.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ +#ifndef TSSESSION_H +#define TSSESSION_H + +#include + +#include "tstaskmonitorglobals.h" + +class CFbsBitmap; + +NONSHARABLE_CLASS( RTsSession ) : public RSessionBase +{ +public: + TInt Connect(); + +public: // task monitor API + HBufC8* TasksContentLC(); + void Subscribe(TRequestStatus& aStatus); + void CancelSubscribe(); + void OpenTask(const TDesC8 &key); + void CloseTask(const TDesC8 &key); + +public: // screenshots API + TInt RegisterScreenshot(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority); + TInt UnregisterScreenshot(TInt wgId); + TInt SetVisibility(TInt wgId, Visibility value); + +private: + void RegisterScreenshotL(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority); + void UnregisterScreenshotL(TInt wgId); + void SetVisibilityL(TInt wgId, Visibility value); + +private: + TInt StartServer(); +}; + +#endif // TSSESSION_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tstaskmonitor_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tstaskmonitor_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,61 @@ +/* +* 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: +* +*/ +#ifndef TSTASKMONITOR_P_H +#define TSTASKMONITOR_P_H + + +#include + +#include +#include +#include + +#include "tstaskmonitorobserver.h" +#include "tstasklauncher.h" +#include "tstaskmonitor.h" + +class RDesReadStream; +class TsTask; +class TsTaskContent; +class CTsTaskMonitorClient; + +class TsTaskMonitorPrivate : public MTsTaskMonitorObserver, public TsTaskLauncher +{ +public: + TsTaskMonitorPrivate(TsTaskMonitor *q); + virtual ~TsTaskMonitorPrivate(); + +public: + QList changeList(); + +public: // from MTsTaskMonitorObserver + virtual void HandleRunningAppChange(); + +public: // from TsTaskLauncher + virtual void openTask(const QByteArray &key); + virtual void closeTask(const QByteArray &key); + +private: // helper methods + void internalizeContentL(RDesReadStream &dataStream, QScopedPointer &content); + +private: + TsTaskMonitor *q_ptr; + CTsTaskMonitorClient *mClient; + RWsSession &mWsSession; +}; + +#endif //TSTASKMONITOR_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tstaskmonitorclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tstaskmonitorclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ +#ifndef TSTASKMONITORCLIENT_H +#define TSTASKMONITORCLIENT_H + +#include + +class MTsTaskMonitorObserver; +class CTsTaskMonitorClientImpl; + +NONSHARABLE_CLASS( CTsTaskMonitorClient ) : public CBase +{ +public: + static CTsTaskMonitorClient* NewL(); + static CTsTaskMonitorClient* NewLC(); + ~CTsTaskMonitorClient(); + +public: + HBufC8* TasksContentLC(); + void Subscribe(MTsTaskMonitorObserver& aObserver); + void CancelSubscribe(); + void OpenTask(const TDesC8 &key); + void CloseTask(const TDesC8 &key); + +private: + CTsTaskMonitorClient(); + void ConstructL(); + +private: + CTsTaskMonitorClientImpl* iImpl; +}; + +#endif // TSTASKMONITORCLIENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tstaskmonitorclientimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tstaskmonitorclientimpl.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ +#ifndef TSTASKMONITORCLIENTIMPL_H +#define TSTASKMONITORCLIENTIMPL_H + +#include + +#include "tssession.h" + +class MTsTaskMonitorObserver; + +NONSHARABLE_CLASS( CTsTaskMonitorClientImpl ) : public CActive +{ +public: + static CTsTaskMonitorClientImpl* NewL(); + static CTsTaskMonitorClientImpl* NewLC(); + ~CTsTaskMonitorClientImpl(); + +public: + HBufC8* TasksContentLC(); + void Subscribe(MTsTaskMonitorObserver& aObserver); + void CancelSubscribe(); + void OpenTask(const TDesC8 &key); + void CloseTask(const TDesC8 &key); + +private: + void RunL(); + void DoCancel(); + +private: + CTsTaskMonitorClientImpl(); + void ConstructL(); + + RTsSession iSession; + MTsTaskMonitorObserver* iObserver; // not owned +}; + +#endif // TSTASKMONITORCLIENTIMPL_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tstaskmonitorobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tstaskmonitorobserver.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2008 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: Client API + * +*/ + +#ifndef TSTASKMONITOROBSERVER_H +#define TSTASKMONITOROBSERVER_H + +#include + +/** + * Observer interface for getting notifications about fast swap content changes. + */ +class MTsTaskMonitorObserver + { +public: + /** + * Called when there is a change in the fast swap content. + * The data can be queried via CTsTaskMonitorClient::TaskListL + */ + virtual void HandleRunningAppChange() = 0; + }; + +#endif //TSTASKMONITOROBSERVER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/inc/tstasksettings_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/inc/tstasksettings_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ +#ifndef TSTASKSETTINGS_P_H +#define TSTASKSETTINGS_P_H + +#include + +class CTsScreenshotClient; + +class TsTaskSettingsPrivate +{ +public: + TsTaskSettingsPrivate(); + ~TsTaskSettingsPrivate(); + +public: + bool registerScreenshot(const QPixmap &screenshot); + bool unregisterScreenshot(); + bool setVisibility(bool visibility); + +private: + int wgId(); + +private: + CTsScreenshotClient *mClient; + +}; + +#endif //TSTASKSETTINGS_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tsscreenshotclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tsscreenshotclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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 + +#include "tsscreenshotclient.h" +#include "tsscreenshotclientimpl.h" + +EXPORT_C CTsScreenshotClient *CTsScreenshotClient::NewL() +{ + CTsScreenshotClient* self = NewLC(); + CleanupStack::Pop(self); + return self; +} + +EXPORT_C CTsScreenshotClient *CTsScreenshotClient::NewLC() +{ + CTsScreenshotClient* self = new (ELeave) CTsScreenshotClient; + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +void CTsScreenshotClient::ConstructL() +{ + iImpl = CTsScreenshotClientImpl::NewL(); +} + +CTsScreenshotClient::CTsScreenshotClient() +{ +} + +EXPORT_C CTsScreenshotClient::~CTsScreenshotClient() +{ + delete iImpl; +} + +EXPORT_C TInt CTsScreenshotClient::RegisterScreenshot(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority) +{ + return iImpl->RegisterScreenshot(screenshot, wgId, priority); +} + +EXPORT_C TInt CTsScreenshotClient::UnregisterScreenshot(TInt wgId) +{ + return iImpl->UnregisterScreenshot(wgId); +} + +EXPORT_C TInt CTsScreenshotClient::SetVisibility(TInt wgId, Visibility value) +{ + return iImpl->SetVisibility(wgId, value); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tsscreenshotclientimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tsscreenshotclientimpl.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ + /* +* 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 + +#include "tsscreenshotclientimpl.h" + +CTsScreenshotClientImpl* CTsScreenshotClientImpl::NewL() +{ + CTsScreenshotClientImpl* self = NewLC(); + CleanupStack::Pop(self); + return self; +} + +CTsScreenshotClientImpl* CTsScreenshotClientImpl::NewLC() +{ + CTsScreenshotClientImpl* self = new (ELeave) CTsScreenshotClientImpl; + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +CTsScreenshotClientImpl::CTsScreenshotClientImpl() +{ +} + +CTsScreenshotClientImpl::~CTsScreenshotClientImpl() +{ + iSession.Close(); +} + +void CTsScreenshotClientImpl::ConstructL() +{ + User::LeaveIfError(iSession.Connect()); +} + +TInt CTsScreenshotClientImpl::RegisterScreenshot(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority) +{ + return iSession.RegisterScreenshot(screenshot, wgId, priority); +} + +TInt CTsScreenshotClientImpl::UnregisterScreenshot(TInt wgId) +{ + return iSession.UnregisterScreenshot(wgId); +} + +TInt CTsScreenshotClientImpl::SetVisibility(TInt wgId, Visibility value) +{ + return iSession.SetVisibility(wgId, value); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tssession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tssession.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,168 @@ +/* +* 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 +#include + +#include "tssession.h" +#include "tsscreenshotmsg.h" +#include "tsunregscreenshotmsg.h" +#include "tsvisibilitymsg.h" + +TInt RTsSession::Connect() +{ + TInt retry = 4; + TInt error(KErrNone); + do { + error = CreateSession(KRunningAppServerName, TVersion(0, 0, 0)); + if (KErrNotFound == error || KErrServerTerminated == error) { + error = StartServer(); + if (KErrNone == error || KErrAlreadyExists == error) { + retry = 0; + error = CreateSession(KRunningAppServerName, TVersion(0, 0, 0)); + } + } else { + retry = 0; + } + } while (--retry > 0); + return error; +} + +TInt RTsSession::StartServer() +{ + TInt error; + + RSemaphore semaphore; + error = semaphore.CreateGlobal(KTsServerReadySemaphore, 0); + + if (KErrNone == error || KErrAlreadyExists == error) { + RProcess server; + error = server.Create(KRunningAppServerName, KNullDesC, TUidType(KNullUid, KNullUid, KRunningAppServerUid)); + if (KErrNone == error) { + TRequestStatus status; + server.Rendezvous(status); + + if (status != KRequestPending) { + server.Kill(0); + User::WaitForRequest(status); + } else { + server.Resume(); + User::WaitForRequest(status); + + // wait for server + semaphore.Wait(); + } + + if (KErrCancel == status.Int()) { + error = KErrNone; + } else { + error = (EExitPanic == server.ExitType()) ? KErrGeneral : status.Int(); + } + } + server.Close(); + } + semaphore.Close(); + + return error; +} + + +HBufC8* RTsSession::TasksContentLC() +{ + for (;;) { + TPckgBuf dataSize; + User::LeaveIfError(SendReceive(GetRunningAppInfo, TIpcArgs(&dataSize))); + HBufC8* data = HBufC8::NewLC(dataSize()); + TPtr8 dataPointer(data->Des()); + TInt err = SendReceive(FlushData, TIpcArgs(&dataPointer, dataSize())); + if (err == KErrNone) { + return data; + } else if (err != KErrCorrupt) { + User::Leave(err); + } + CleanupStack::PopAndDestroy(data); + // If result was KErrCorrupt then the size received from GetRunningAppInfo is + // not valid anymore so restart the whole procedure. + } +} + +void RTsSession::Subscribe(TRequestStatus& aStatus) +{ + SendReceive(SubscribeRunningAppChanges, aStatus); +} + +void RTsSession::CancelSubscribe() +{ + SendReceive(CancelSubscribeRunningAppChanges); +} + +void RTsSession::OpenTask(const TDesC8 &key) +{ + SendReceive(OpenTaskMessage, TIpcArgs(&key)); +} + +void RTsSession::CloseTask(const TDesC8 &key) +{ + SendReceive(CloseTaskMessage, TIpcArgs(&key)); +} + +TInt RTsSession::RegisterScreenshot(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority) +{ + TRAPD(errNo, RegisterScreenshotL(screenshot, wgId, priority)); + return errNo; +} + +TInt RTsSession::UnregisterScreenshot(TInt wgId) +{ + TRAPD(errNo, UnregisterScreenshotL(wgId)); + return errNo; +} + +TInt RTsSession::SetVisibility(TInt wgId, Visibility value) +{ + TRAPD(errNo, SetVisibilityL(wgId, value)); + return errNo; +} + +void RTsSession::RegisterScreenshotL(CFbsBitmap *screenshot, TInt wgId, UpdatePriority priority) +{ + CTsScreenshotMsg *message = CTsScreenshotMsg::NewLC(wgId, *screenshot, priority); + HBufC8* serializedData = message->ExternalizeLC(); + TIpcArgs arguments(serializedData); + User::LeaveIfError(SendReceive(RegisterScreenshotMessage, arguments)); + CleanupStack::PopAndDestroy(serializedData); + CleanupStack::PopAndDestroy(message); +} + +void RTsSession::UnregisterScreenshotL(TInt wgId) +{ + CTsUnregisterScreenshotMsg *message = CTsUnregisterScreenshotMsg::NewLC(wgId); + HBufC8* serializedData = message->ExternalizeLC(); + TIpcArgs arguments(serializedData); + User::LeaveIfError(SendReceive(UnregisterScreenshotMessage, arguments)); + CleanupStack::PopAndDestroy(serializedData); + CleanupStack::PopAndDestroy(message); +} + +void RTsSession::SetVisibilityL(TInt wgId, Visibility value) +{ + CTsVisibilitMsg *message = CTsVisibilitMsg::NewLC(wgId, value); + HBufC8* serializedData = message->ExternalizeLC(); + TIpcArgs arguments(serializedData); + User::LeaveIfError(SendReceive(VisibilityChange, arguments)); + CleanupStack::PopAndDestroy(serializedData); + CleanupStack::PopAndDestroy(message); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tstaskmonitor_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tstaskmonitor_p.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,129 @@ +/* +* 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 "tstaskmonitor_p.h" +#include "tstaskmonitor.h" + +#include +#include +#include + +#include + +#include "tstaskmonitorclient.h" +#include "tstask.h" +#include "tstaskcontent.h" +#include "tstaskchangeinfo.h" +#include "tsutils.h" +using TaskSwitcher::CleanupResetAndDestroyPushL; + +TsTaskMonitorPrivate::TsTaskMonitorPrivate(TsTaskMonitor *q) : q_ptr(q), mClient(0), mWsSession(CEikonEnv::Static()->WsSession()) +{ + QT_TRAP_THROWING(mClient = CTsTaskMonitorClient::NewL()); + mClient->Subscribe(*this); +} + +TsTaskMonitorPrivate::~TsTaskMonitorPrivate() +{ + mClient->CancelSubscribe(); + delete mClient; +} + + +QList TsTaskMonitorPrivate::changeList() +{ + QList changes; + TsTaskChangeInfo qtChangeItem(-2,-2); + + QT_TRAP_THROWING ( + + HBufC8 *data = mClient->TasksContentLC(); + if (data->Size() == 0) { + CleanupStack::PopAndDestroy(data); + return changes; + } + TPtr8 dataPointer(data->Des()); + RDesReadStream dataStream(dataPointer); + CleanupClosePushL(dataStream); + + int count = dataStream.ReadInt32L(); + QT_TRYCATCH_LEAVING( + changes.append( TsTaskChange( qtChangeItem, QSharedPointer())); + for (int iter(0); iter < count; iter++) { + qtChangeItem = TsTaskChangeInfo(iter, TsTaskChangeInfo::KInvalidOffset); + QScopedPointer content(new TsTaskContent); + internalizeContentL(dataStream, content); + changes.append( TsTaskChange( qtChangeItem, QSharedPointer(new TsTask(content.take(), *this)))); + } + )//QT_TRYCATCH_LEAVING + CleanupStack::PopAndDestroy(&dataStream); + CleanupStack::PopAndDestroy(data); + );//QT_TRAP_THROWING + + return changes; +} + +void TsTaskMonitorPrivate::internalizeContentL(RDesReadStream & dataStream, QScopedPointer &content) +{ + // get name + TInt nameLength(dataStream.ReadInt32L()); + if (0 < nameLength) { + HBufC* name = HBufC::NewLC(dataStream, nameLength); + content->mName = XQConversions::s60DescToQString(*name); + CleanupStack::PopAndDestroy(name); + } + + // get screenshot + TInt screenshotHandle = dataStream.ReadInt32L(); + CFbsBitmap *screenshot = new (ELeave) CFbsBitmap; + CleanupStack::PushL(screenshot); + if (KErrNone == screenshot->Duplicate(screenshotHandle)) { + content->mScreenshot = QPixmap::fromSymbianCFbsBitmap(screenshot); + } + CleanupStack::PopAndDestroy(screenshot); + + // get key + TInt keyLength(dataStream.ReadInt32L()); + if (0 < keyLength) { + HBufC8* key = HBufC8::NewLC(keyLength); + TPtr8 des(key->Des()); + dataStream.ReadL(des, keyLength); + content->mKey = XQConversions::s60Desc8ToQByteArray(*key); + CleanupStack::PopAndDestroy(key); + } + + // get other values + content->mActive = dataStream.ReadInt32L(); + content->mClosable = dataStream.ReadInt32L(); +} + +void TsTaskMonitorPrivate::HandleRunningAppChange() +{ + emit q_ptr->taskListChanged(); +} + +void TsTaskMonitorPrivate::openTask(const QByteArray &key) +{ + TPtrC8 desC(reinterpret_cast(key.constData()), key.length()); + mClient->OpenTask(desC); + +} + +void TsTaskMonitorPrivate::closeTask(const QByteArray &key) +{ + TPtrC8 desC(reinterpret_cast(key.constData()), key.length()); + mClient->CloseTask(desC); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tstaskmonitorclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tstaskmonitorclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,75 @@ +/* +* 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 + +#include "tstaskmonitorclient.h" +#include "tstaskmonitorclientimpl.h" + +CTsTaskMonitorClient *CTsTaskMonitorClient::NewL() +{ + CTsTaskMonitorClient* self = NewLC(); + CleanupStack::Pop(self); + return self; +} + +CTsTaskMonitorClient *CTsTaskMonitorClient::NewLC() +{ + CTsTaskMonitorClient* self = new (ELeave) CTsTaskMonitorClient; + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +void CTsTaskMonitorClient::ConstructL() +{ + iImpl = CTsTaskMonitorClientImpl::NewL(); +} + +CTsTaskMonitorClient::CTsTaskMonitorClient() +{ +} + +CTsTaskMonitorClient::~CTsTaskMonitorClient() +{ + delete iImpl; +} + +HBufC8* CTsTaskMonitorClient::TasksContentLC() +{ + return iImpl->TasksContentLC(); +} + +void CTsTaskMonitorClient::Subscribe(MTsTaskMonitorObserver& aObserver) +{ + iImpl->Subscribe(aObserver); +} + +void CTsTaskMonitorClient::CancelSubscribe() +{ + iImpl->CancelSubscribe(); +} + +void CTsTaskMonitorClient::OpenTask(const TDesC8 &key) +{ + iImpl->OpenTask(key); +} + +void CTsTaskMonitorClient::CloseTask(const TDesC8 &key) +{ + iImpl->CloseTask(key); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tstaskmonitorclientimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tstaskmonitorclientimpl.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,95 @@ +/* +* 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 + +#include "tstaskmonitorclientimpl.h" +#include "tstaskmonitorobserver.h" + +CTsTaskMonitorClientImpl* CTsTaskMonitorClientImpl::NewL() +{ + CTsTaskMonitorClientImpl* self = NewLC(); + CleanupStack::Pop(self); + return self; +} + +CTsTaskMonitorClientImpl* CTsTaskMonitorClientImpl::NewLC() +{ + CTsTaskMonitorClientImpl* self = new (ELeave) CTsTaskMonitorClientImpl; + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +CTsTaskMonitorClientImpl::CTsTaskMonitorClientImpl() : CActive(CActive::EPriorityStandard) +{ + CActiveScheduler::Add(this); +} + +CTsTaskMonitorClientImpl::~CTsTaskMonitorClientImpl() +{ + Cancel(); + iSession.Close(); +} + +void CTsTaskMonitorClientImpl::ConstructL() +{ + User::LeaveIfError(iSession.Connect()); +} + + +HBufC8* CTsTaskMonitorClientImpl::TasksContentLC() +{ + return iSession.TasksContentLC(); +} + +void CTsTaskMonitorClientImpl::Subscribe(MTsTaskMonitorObserver& aObserver) +{ + Cancel(); + iObserver = &aObserver; + iSession.Subscribe(iStatus); + SetActive(); +} + +void CTsTaskMonitorClientImpl::CancelSubscribe() +{ + Cancel(); +} + +void CTsTaskMonitorClientImpl::OpenTask(const TDesC8 &key) +{ + iSession.OpenTask(key); +} + +void CTsTaskMonitorClientImpl::CloseTask(const TDesC8 &key) +{ + iSession.CloseTask(key); +} + +void CTsTaskMonitorClientImpl::RunL() +{ + if (iStatus == KErrNone && iObserver) { + iSession.Subscribe(iStatus); + SetActive(); + iObserver->HandleRunningAppChange(); + } +} + +void CTsTaskMonitorClientImpl::DoCancel() +{ + iSession.CancelSubscribe(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/s60/src/tstasksettings_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/s60/src/tstasksettings_p.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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 "tstasksettings_p.h" + +#include +#include +#include +#include +#include + +#include "tsscreenshotclient.h" +#include "tstaskmonitorglobals.h" + +TsTaskSettingsPrivate::TsTaskSettingsPrivate() : mClient(0) +{ + QT_TRAP_THROWING(mClient = CTsScreenshotClient::NewL()); +} + +TsTaskSettingsPrivate::~TsTaskSettingsPrivate() +{ + delete mClient; +} + +bool TsTaskSettingsPrivate::registerScreenshot(const QPixmap &screenshot) +{ + QScopedPointer bitmap(screenshot.toSymbianCFbsBitmap()); + if (bitmap.isNull()) + return false; + + return KErrNone == mClient->RegisterScreenshot(bitmap.data(), wgId()); +} + +bool TsTaskSettingsPrivate::unregisterScreenshot() +{ + return KErrNone == mClient->UnregisterScreenshot(wgId()); +} + +bool TsTaskSettingsPrivate::setVisibility(bool visibility) +{ + return (KErrNone == mClient->SetVisibility(wgId(), visibility ? Visible : Invisible)); +} + +int TsTaskSettingsPrivate::wgId() +{ + return QApplication::desktop()->winId()->ControlEnv()->RootWin().WindowGroupId(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/src/tstask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/src/tstask.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,93 @@ +/* +* 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 "tstask.h" + +#include "tstaskcontent.h" +#include "tstasklauncher.h" + +/*! + @class TsTask + @ingroup publicApi + @brief TsTask object represents a single task. + + This class represents one running task. It can be queried for task content + like screenshot or task name, or used to start or close task. +*/ + +/*! + @internal + Constructor. +*/ +TsTask::TsTask(TsTaskContent *content, TsTaskLauncher &launcher) : mContent(content), mLauncher(launcher) +{ +} + +/*! + Destructor. +*/ +TsTask::~TsTask() +{ + delete mContent; +} + +/*! + @return True if it's possible to close the task, false otherwise. +*/ +bool TsTask::isClosable() const +{ + return mContent->mClosable; +} + +/*! + @return True if the task is running, false otherwise. +*/ +bool TsTask::isActive() const +{ + return mContent->mActive; +} + +/*! + @return Screenshot of the task. +*/ +QPixmap TsTask::screenshot() const +{ + return mContent->mScreenshot; +} + +/*! + @return Name of the task. +*/ +QString TsTask::name() const +{ + return mContent->mName; +} + +/*! + Start or bring the task to foreground. +*/ +void TsTask::open() +{ + mLauncher.openTask(mContent->mKey); +} + +/*! + Close the task. +*/ +void TsTask::close() +{ + mLauncher.closeTask(mContent->mKey); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/src/tstaskchangeinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/src/tstaskchangeinfo.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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 "tstaskchangeinfo.h" + +TsTaskChangeInfo::TsTaskChangeInfo(int newOffset, int oldOffset) : + mNewOffset(newOffset), mOldOffset(oldOffset) +{ +} + +int TsTaskChangeInfo::newOffset() const +{ + return mNewOffset; +} + +int TsTaskChangeInfo::oldOffset() const +{ + return mOldOffset; +} + +TsTaskChangeInfo::ChangeType TsTaskChangeInfo::changeType() const +{ + ChangeType retVal(EChangeInsert); + if (KInvalidOffset == mNewOffset) { + if (KInvalidOffset == mOldOffset) { + retVal = EChangeCancel; + } else { + retVal = EChangeDelete; + } + } else if (mOldOffset == mNewOffset) { + retVal = EChangeUpdate; + } else if(KInvalidOffset != mOldOffset) { + retVal = EChangeMove; + } + return retVal; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/src/tstaskmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/src/tstaskmonitor.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,71 @@ +/* +* 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 "tstaskmonitor.h" +#include "tstaskmonitor_p.h" + +#include "tstask.h" + +/*! + @class TsTaskMonitor + @ingroup publicApi + @brief TsTaskMonitor gives access to list of running tasks. + + This class is one of the Qt interfaces for Task Monitor server. It can be + used to retrieve list of running tasks and receive notifications about the + changes of this list. +*/ + +/*! + Constructor. +*/ +TsTaskMonitor::TsTaskMonitor(QObject *parent) : QObject(parent), d_ptr(0) +{ + d_ptr = new TsTaskMonitorPrivate(this); +} + +/*! + Destructor. +*/ +TsTaskMonitor::~TsTaskMonitor() +{ + delete d_ptr; +} + +/*! + \return Current list of tasks from Task Monitor server. + + \sa TsTask, taskListChanged() +*/ +QList TsTaskMonitor::changeList(bool /*fullList*/) +{ + return d_ptr->changeList(); +} + +/*! + @fn TsTaskMonitor::taskListChanged() + + This signal is emitted when task list changes in any way: + - the new task is started + - running task is terminated + - parameters of one task change (for example image representing the task is updated) + + No data is passed within this signal, user should retrieve task list + using taskList(). + + \sa taskList() +*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/src/tstasksettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/src/tstasksettings.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,73 @@ +/* +* 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 "tstasksettings.h" +#include "tstasksettings_p.h" + +/*! + @class TsTaskSettings + @ingroup publicApi + @brief TsTaskSettings allows application to alter the way it will be + handled by TsTaskMonitor. + + This class is one of the Qt interfaces for Task Monitor server. It can be + used to set custom screenshot of the task, or to change the task visibility. +*/ + +/*! + Constructor. +*/ +TsTaskSettings::TsTaskSettings() : d_ptr(new TsTaskSettingsPrivate()) +{ +} + +/*! + Destructor. +*/ +TsTaskSettings::~TsTaskSettings() +{ + delete d_ptr; +} + +/*! + Overwrites default screenshot of task with \a screenshot. If \a + screenshot is null, this method will return false. + @return True if the screenshot is successfully saved, false otherwise. +*/ +bool TsTaskSettings::registerScreenshot(const QPixmap &screenshot) +{ + return d_ptr->registerScreenshot(screenshot); +} + +/*! + Removes custom screenshot saved with registerScreenshot(). If there was no + saved screenshot, this method will return false. + @return True if the screenshot is successfully removed, false otherwise. +*/ +bool TsTaskSettings::unregisterScreenshot() +{ + return d_ptr->unregisterScreenshot(); +} + +/*! + Changes the \a visibilty of task. Hidden tasks are not present on the task + list returned by TsTaskMonitor::taskList(). + @return True if the visibility is changed successfully, false otherwise. +*/ +bool TsTaskSettings::setVisibility(bool visibility) +{ + return d_ptr->setVisibility(visibility); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/stub/inc/tstaskmonitor_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/stub/inc/tstaskmonitor_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef TSTASKMONITOR_P_H +#define TSTASKMONITOR_P_H + +#include +#include + +#include "tstask.h" + +class TsTaskMonitor; + +class TsTaskMonitorPrivate +{ +public: + TsTaskMonitorPrivate(TsTaskMonitor *q); + +public: + QList< QSharedPointer > taskList(); + +}; + +#endif //TSTASKMONITOR_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/stub/inc/tstasksettings_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/stub/inc/tstasksettings_p.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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: +* +*/ +#ifndef TSTASKSETTINGS_P_H +#define TSTASKSETTINGS_P_H + +#include + +class TsTaskSettingsPrivate +{ +public: + bool registerScreenshot(const QPixmap &screenshot); + bool unregisterScreenshot(); +}; + +#endif //TSTASKSETTINGS_P_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/stub/src/tstaskmonitor_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/stub/src/tstaskmonitor_p.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,28 @@ +/* +* 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 "tstaskmonitor_p.h" + +TsTaskMonitorPrivate::TsTaskMonitorPrivate(TsTaskMonitor *q) +{ + Q_UNUSED(q); +} + +QList< QSharedPointer > TsTaskMonitorPrivate::taskList() +{ + return QList< QSharedPointer >(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/stub/src/tstasksettings_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/stub/src/tstasksettings_p.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,28 @@ +/* +* 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 "tstasksettings_p.h" + +bool TsTaskSettingsPrivate::registerScreenshot(const QPixmap &screenshot) +{ + Q_UNUSED(screenshot); + return true; +} + +bool TsTaskSettingsPrivate::unregisterScreenshot() +{ + return true; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/t_tstaskmonitorclient/t_tstaskmonitorclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/t_tstaskmonitorclient/t_tstaskmonitorclient.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,177 @@ +/* +* 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_tstaskmonitorclient.h" + +#include + +#include "tstestutils.h" + +#include "tstaskchangeinfo.h" +#include "tstask.h" + +namespace { + const char KUnitTestTaskName[] = "t_tstaskmonitorclient"; + const char KTestApplicationName[] = "appwithouticon"; +} + +void T_TsTaskMonitorClient::initTestCase() +{ + QCOMPARE(mWsSession.Connect(), KErrNone); +} + +void T_TsTaskMonitorClient::cleanupTestCase() +{ + mWsSession.Close(); +} + +void T_TsTaskMonitorClient::testTaskClose() +{ + int firstCount = mTaskMonitor.changeList(true).count(); + + // start test application and wait for notification + quint64 testApplicationId; + QVERIFY(TsTestUtils::startApplication(KTestApplicationName, testApplicationId)); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + + // find test application task + QSharedPointer testAppTask = findTask(KTestApplicationName); + QVERIFY(!testAppTask.isNull()); + + int secondCount = mTaskMonitor.changeList(true).count(); + QCOMPARE(secondCount, firstCount + 1); + + // call close and wait for task list change signal + testAppTask->close(); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + QTest::qWait(3000); // wait until the process fully closes + + // we closed the test application, so the count should be equal to the first one + int thirdCount = mTaskMonitor.changeList(true).count(); + QCOMPARE(thirdCount, firstCount); +} + +void T_TsTaskMonitorClient::testTaskListChangeSignal() +{ + QSignalSpy spy(&mTaskMonitor, SIGNAL(taskListChanged())); + QVERIFY(spy.isValid()); + + // start app + quint64 testApplicationId; + QVERIFY(TsTestUtils::startApplication(KTestApplicationName, testApplicationId)); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + QCOMPARE(spy.count(), 1); + + // find unit test task + QSharedPointer unitTestTask = findTask(KUnitTestTaskName); + QVERIFY(!unitTestTask.isNull()); + + // signal is emitted after order of tasks is changed + unitTestTask->open(); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + QCOMPARE(spy.count(), 2); + + // close test app + QVERIFY(TsTestUtils::closeApplication(testApplicationId)); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); +} + +void T_TsTaskMonitorClient::testTaskList() +{ + // get task list, it should contain at least one application - this unit test + int firstCount = mTaskMonitor.changeList(true).count(); + QVERIFY(firstCount); + + // start test application, and get task list. + // It should contain one more item than during first check + + { + quint64 testApplicationId; + QVERIFY(TsTestUtils::startApplication(KTestApplicationName, testApplicationId)); + // wait for signals after application start and backstepping + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + + int secondCount = mTaskMonitor.changeList(true).count(); + QCOMPARE(secondCount, firstCount + 1); + + QVERIFY(TsTestUtils::closeApplication(testApplicationId)); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + } + QTest::qWait(3000); // wait until the process fully closes + + // close test application and get task list + // It should contain the same number of items as during first check + QCOMPARE(mTaskMonitor.changeList(true).count(), firstCount); +} + +void T_TsTaskMonitorClient::testTaskChangeInfoGetters() +{ + const int KNewOffset(1500); + const int KOldOffset(2900); + + TsTaskChangeInfo changeInfo(KNewOffset, KOldOffset); + QCOMPARE(changeInfo.newOffset(), KNewOffset); + QCOMPARE(changeInfo.oldOffset(), KOldOffset); +} + +void T_TsTaskMonitorClient::testCreatingInsertTaskChangeInfo() +{ + TsTaskChangeInfo changeInfo(0, TsTaskChangeInfo::KInvalidOffset); + QCOMPARE(changeInfo.changeType(), TsTaskChangeInfo::EChangeInsert); +} + +void T_TsTaskMonitorClient::testCreatingDeleteTaskChangeInfo() +{ + TsTaskChangeInfo changeInfo(TsTaskChangeInfo::KInvalidOffset, 0); + QCOMPARE(changeInfo.changeType(), TsTaskChangeInfo::EChangeDelete); +} + +void T_TsTaskMonitorClient::testCreatingMoveTaskChangeInfo() +{ + TsTaskChangeInfo changeInfo(0, 1); + QCOMPARE(changeInfo.changeType(), TsTaskChangeInfo::EChangeMove); +} + +void T_TsTaskMonitorClient::testCreatingUpdateTaskChangeInfo() +{ + TsTaskChangeInfo changeInfo(0, 0); + QCOMPARE(changeInfo.changeType(), TsTaskChangeInfo::EChangeUpdate); +} + +void T_TsTaskMonitorClient::testCreatingCancelTaskChangeInfo() +{ + TsTaskChangeInfo changeInfo(TsTaskChangeInfo::KInvalidOffset, TsTaskChangeInfo::KInvalidOffset); + QCOMPARE(changeInfo.changeType(), TsTaskChangeInfo::EChangeCancel); +} + +QSharedPointer T_TsTaskMonitorClient::findTask(const QString &taskName) +{ + // find unit test task + QSharedPointer myTask; + foreach(TsTaskChange taskChange, mTaskMonitor.changeList(true)) { + if (!taskChange.second.isNull()) { + if (taskChange.second->name().contains(taskName)) { + myTask = taskChange.second; + break; + } + } + } + return myTask; +} + +QTEST_MAIN(T_TsTaskMonitorClient) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/t_tstaskmonitorclient/t_tstaskmonitorclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/t_tstaskmonitorclient/t_tstaskmonitorclient.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +/* +* 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: +* +*/ +#ifndef T_TSTASKMONITORCLIENT_H +#define T_TSTASKMONITORCLIENT_H + +#include +#include +#include "tstaskmonitor.h" + +/** +* @test Test class for TsTaskMonitorClient +*/ +class T_TsTaskMonitorClient : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + + void testTaskListChangeSignal(); + void testTaskList(); + void testTaskClose(); + +private slots: + void testTaskChangeInfoGetters(); + void testCreatingInsertTaskChangeInfo(); + void testCreatingDeleteTaskChangeInfo(); + void testCreatingMoveTaskChangeInfo(); + void testCreatingUpdateTaskChangeInfo(); + void testCreatingCancelTaskChangeInfo(); + +private: // helper methods + QSharedPointer findTask(const QString &taskName); + +private: + TsTaskMonitor mTaskMonitor; + RWsSession mWsSession; + +}; + +#endif //T_TSTASKMONITORCLIENT_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/t_tstaskmonitorclient/t_tstaskmonitorclient.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/t_tstaskmonitorclient/t_tstaskmonitorclient.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +# +# 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: +# + +TEMPLATE = app + +QT *= testlib +CONFIG += console + +INCLUDEPATH += . \ + +HEADERS += t_tstaskmonitorclient.h \ + +SOURCES += t_tstaskmonitorclient.cpp \ + +DEFINES += TSTASKMONITOR_TEST + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA=1 + + LIBS += -lcone \ + -lapgrfx \ # for RApaLsSession + -lws32 \ # for RWsSession + +} + +LIBS += -ltsutils.dll + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils + +coverage { + DEFINES += COVERAGE_MEASUREMENT + DEFINES += QT_NO_DEBUG # omit ASSERTS in coverage measurements +} + +include(../../client.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/t_tstasksettings/t_tstasksettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/t_tstasksettings/t_tstasksettings.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -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) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/t_tstasksettings/t_tstasksettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/t_tstasksettings/t_tstasksettings.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +/* +* 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: +* +*/ +#ifndef T_TSTASKSETTINGS_H +#define T_TSTASKSETTINGS_H + +#include + +#include "tstaskmonitor.h" +#include "tstasksettings.h" + +/** +* @test Test class for TsTaskSettings +*/ +class T_TsTaskSettings : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void testRegisteringScreenshotTriggersTaskListChangeSignal(); + void testUnregisteringScreenshotTriggersTaskListChangeSignal(); + void testIconIsReturnedAfterUnregisteringScreenshot(); + void testRegisteringEmptyPixmapReturnsFalse(); + void testRegisteringTheSameScreenshotTwiceTriggersTaskListChangeSignal(); + void testRegisteringOverwritesOldScreenshot(); + void testRegisteringFailsIfHigherPriorityScreenshotIsRegistered(); + + void testChangingVisibilityOfApplication(); + +private: + QSharedPointer unitTestTask(); + QPixmap imageWithCircle(); + bool registerHighPriorityScreenshot(const QPixmap &screenshot); + +private: + TsTaskSettings mTaskSettings; + TsTaskMonitor mTaskMonitor; + +}; + +#endif //T_TSTASKSETTINGS_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/t_tstasksettings/t_tstasksettings.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/t_tstasksettings/t_tstasksettings.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +# +# 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: +# + +TEMPLATE = app + +QT *= testlib +CONFIG += console + +INCLUDEPATH += . \ + +HEADERS += t_tstasksettings.h \ + +SOURCES += t_tstasksettings.cpp \ + +DEFINES += TSTASKMONITOR_TEST + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA=1 + + LIBS += -lcone \ + -lapgrfx \ # for RApaLsSession + -lws32 \ # for RWsSession + +} + +LIBS += -ltsutils.dll + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils + +coverage { + DEFINES += COVERAGE_MEASUREMENT + DEFINES += QT_NO_DEBUG # omit ASSERTS in coverage measurements +} + +include(../../client.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/client/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/client/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +# +# 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: +# + +TEMPLATE = subdirs + +# dependencies +SUBDIRS += ../../../internal/tstestutils \ + ../../../internal/tsapps/testapp \ + +# test cases +SUBDIRS += t_tstaskmonitorclient \ + t_tstasksettings \ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/inc/tstaskmonitorglobals.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/inc/tstaskmonitorglobals.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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: +* +*/ +#ifndef RUNNINGAPPGLOBALS_H +#define RUNNINGAPPGLOBALS_H + +#include + +_LIT(KRunningAppServerName, "hsrunningappmonitor"); +_LIT(KTsServerReadySemaphore, "TaskSwitcherReadySemaphore"); +const TUid KRunningAppServerUid = {0x200267B0}; +const TInt KRequestDataSizeOffset(0); +const TInt KRequestDataBufferOffset(0); + +enum RunningAppCmd { + GetRunningAppInfo =0, + SubscribeRunningAppChanges, + UpdateScreenshot, + FlushData, + CancelSubscribeRunningAppChanges, + RegisterScreenshotMessage, + UnregisterScreenshotMessage, + VisibilityChange, + OpenTaskMessage, + CloseTaskMessage, +}; + +enum UpdatePriority { + Low = 0, + Normal, + High +}; + +enum Visibility { + Invisible =0, + Visible +}; + +enum ScreenshotMessageOffsets { + ScreenshotHandle = 0, + WindowsGroup, + AdditionalParameters, + Priority +}; + +#endif //RUNNINGAPPGLOBALS_H + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/rom.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/rom.pri Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " +BLD_INF_RULES.prj_exports += "rom/tstaskmonitor_core.iby CORE_APP_LAYER_IBY_EXPORT_PATH(tstaskmonitor_core.iby)" +BLD_INF_RULES.prj_exports += "./sis/stubs/taskmonitor_stub.sis /epoc32/release/winscw/udeb/z/system/install/taskmonitor_stub.sis" +BLD_INF_RULES.prj_exports += "./sis/stubs/taskmonitor_stub.sis /epoc32/data/z/system/install/taskmonitor_stub.sis" diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/rom/tstaskmonitor_core.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/rom/tstaskmonitor_core.iby Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +/* +* 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: +* +*/ +#ifndef __TSTASKMONITOR_CORE_IBY__ +#define __TSTASKMONITOR_CORE_IBY__ + +file=ABI_DIR\BUILD_DIR\tstaskmonitorclient.dll SHARED_LIB_DIR\tstaskmonitorclient.dll +file=ABI_DIR\BUILD_DIR\hsrunningappmonitor.exe PROGRAMS_DIR\hsrunningappmonitor.exe +data=\epoc32\data\z\resource\apps\hsrunningappmonitor.rsc resource\apps\hsrunningappmonitor.rsc +data=ZPRIVATE\10003a3f\import\apps\hsrunningappmonitor_reg.rsc private\10003a3f\import\apps\hsrunningappmonitor_reg.rsc + + +file=ABI_DIR\BUILD_DIR\tsbackstepping.dll SHARED_LIB_DIR\tsbackstepping.dll + + +ECOM_PLUGIN( tsscreenshotplugin.dll, tsscreenshotplugin.rsc ) + +// stub sis +data=ZSYSTEM/install/taskmonitor_stub.sis system/install/taskmonitor_stub.sis + +#endif //__TSTASKMONITOR_CORE_IBY__ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/group/bld.inf Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +/* +* 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: +* +*/ +PRJ_PLATFORMS +DEFAULT + +PRJ_MMPFILES +tsscreenshotplugin.mmp diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/group/tsscreenshotplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/group/tsscreenshotplugin.mmp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,45 @@ +/* +* 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: +* +*/ +TARGET tsscreenshotplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x200267AE +CAPABILITY CAP_ECOM_PLUGIN +VENDORID VID_DEFAULT + +OPTION_REPLACE ARMCC --arm -O3 --cpu 6 + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc +USERINCLUDE ../../utils/inc +USERINCLUDE ../../inc + +SOURCEPATH ../src +SOURCE tsscreenshotmain.cpp +SOURCE tsscreenshotplugin.cpp +SOURCE ../../utils/src/tsscreenshotmsg.cpp + +RESOURCE tsscreenshotplugin.rss + +LIBRARY ecom.lib +LIBRARY euser.lib +LIBRARY wsgraphicdrawer.lib +LIBRARY fbscli.lib +LIBRARY estor.lib +LIBRARY gdi.lib +LIBRARY tstaskmonitorclient.lib +DEBUGLIBRARY flogger.lib diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/inc/tsscreenshotplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/inc/tsscreenshotplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2008 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: +* +*/ +#ifndef TSSCREENSHOTPLUGIN_H +#define TSSCREENSHOTPLUGIN_H + +#include +#include +#include + +class CTsScreenshotPlugin: public CWsGraphicDrawer, + public MWsEventHandler +{ +public: + /** + * Two phase constructor + */ + + static CTsScreenshotPlugin* NewL(); + + /** + * Destructor + */ + ~CTsScreenshotPlugin(); + +private: + /** + * From CWsGraphicDrawer. + * @see CWsGraphicDrawer::DoDraw(MWsGc&, const TRect&, const TDesC8&) const + */ + void DoDraw(MWsGc&, const TRect&, const TDesC8&) const; + + /** + * From CWsGraphicDrawer + * @see CWsGraphicDrawer::HandleMessage(const TDesC8&) + */ + void HandleMessage(const TDesC8&); + + void HandleMessageL(const TDesC8&); + + /** + * From CWsGraphicDrawer + * @see CWsGraphicDrawer::ConstructL(MWsGraphicDrawerEnvironment&, const TGraphicDrawerId& , MWsClient&, const TDesC8&) + */ + void ConstructL(MWsGraphicDrawerEnvironment& env, + const TGraphicDrawerId& id, + MWsClient& owner, + const TDesC8& data); + + /** + * From MWsEventHandler. + * + * @see MWsEventHandler::DoHandleEvent(const TWservCrEvent&) + */ + void DoHandleEvent(const TWservCrEvent& event); + + /** + * Function take screenshot od current display + * @param screenshot identyfier + */ + void TakeScreenshot(TInt); + + /** + * Function take screenshot od current display + * @param screenshot identyfier + */ + void TakeScreenshotL(TInt); + +private: + RPointerArray mCache; + TInt mWindowGroupId; +}; + +#endif //TSSCREENSHOTPLUGIN_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/screenshotplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/screenshotplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +TEMPLATE = subdirs + +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include \"group/bld.inf\"" + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/src/tsscreenshotmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/src/tsscreenshotmain.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2008 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 +#include "tsscreenshotplugin.h" + +const TInt KImpId( 0x200267AE ); + +// -------------------------------------------------------------------------- +// KImplementationTable +// -------------------------------------------------------------------------- +// +LOCAL_C const TImplementationProxy KImplementationTable[] = +{ + IMPLEMENTATION_PROXY_ENTRY(KImpId, CTsScreenshotPlugin::NewL) +}; + +// -------------------------------------------------------------------------- +// ImplementationGroupProxy +// -------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) +{ + aTableCount = (sizeof(KImplementationTable) / sizeof(TImplementationProxy)); + return KImplementationTable; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/src/tsscreenshotplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/src/tsscreenshotplugin.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2008 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 +#include + +#include + +#include "tsscreenshotplugin.h" +#include "tsscreenshotmsg.h" + +const TInt KInvalidGroupId(~0); +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CTsScreenshotPlugin* CTsScreenshotPlugin::NewL() +{ + //no second step construction is required here + //window server will initialize plugin later + return new(ELeave)CTsScreenshotPlugin(); +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::ConstructL(MWsGraphicDrawerEnvironment& env, + const TGraphicDrawerId& id, + MWsClient& owner, + const TDesC8& /*data*/ ) +{ + BaseConstructL(env, id, owner); + env.RegisterEventHandler(this, + this, + TWservCrEvent::EWindowGroupChanged | + TWservCrEvent::EDeviceOrientationChanged); + mWindowGroupId = KInvalidGroupId; +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CTsScreenshotPlugin::~CTsScreenshotPlugin() +{ + Env().UnregisterEventHandler(this); + mCache.ResetAndDestroy(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::DoDraw(MWsGc&, const TRect&, const TDesC8&) const +{ + //plugin is not a real drawer + //no implementation required +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::HandleMessage(const TDesC8& msg) +{ + TRAP_IGNORE(HandleMessageL(msg)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::HandleMessageL(const TDesC8& msg) +{ + RDesReadStream msgStream(msg); + CleanupClosePushL(msgStream); + TInt function = msgStream.ReadInt32L(); + if (RegisterScreenshotMessage == function) { + CTsScreenshotMsg *screenshotMsg = CTsScreenshotMsg::NewLC(msgStream); + for(TInt iter(0); iter < mCache.Count(); ++iter) { + if (mCache[iter]->Handle() == screenshotMsg->screenshot().Handle()) { + //bitmap is not needed no more + delete mCache[iter]; + mCache.Remove(iter); + break; + } + } + CleanupStack::PopAndDestroy(screenshotMsg); + } + CleanupStack::PopAndDestroy(&msgStream); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::DoHandleEvent(const TWservCrEvent& event) +{ + switch (event.Type()) { + case TWservCrEvent::EWindowGroupChanged: + if (KInvalidGroupId != mWindowGroupId) { + TakeScreenshot(mWindowGroupId); + } + mWindowGroupId = event.WindowGroupIdentifier(); + break; + case TWservCrEvent::EDeviceOrientationChanged: + TakeScreenshot(mWindowGroupId); + break; + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::TakeScreenshot(TInt id) +{ + TRAP_IGNORE(TakeScreenshotL(id);) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotPlugin::TakeScreenshotL(TInt id) +{ + if(0 >= Env().ScreenCount()) { + User::Leave(KErrCorrupt); + } + const TInt screenId(0); //use local variable in case of changing screen selection policy + const MWsScreenConfig* const screenConfig = + Env().Screen(screenId)->ObjectInterface(); + const MWsScreenDevice* const screenDevice = + static_cast(Env().Screen(screenId)->ResolveObjectInterface(MWsScreenDevice::EWsObjectInterfaceId)); + + User::LeaveIfNull(screenConfig); + User::LeaveIfNull(screenDevice); + + //prepare destination bitmap + CFbsBitmap *bitmap = new (ELeave) CFbsBitmap(); + CleanupStack::PushL(bitmap); + + + User::LeaveIfError(bitmap->Create(screenConfig->SizeInPixels(), + screenConfig->DisplayMode())); + + screenDevice->CopyScreenToBitmapL(bitmap, + screenConfig->SizeInPixels()); + + + //prepare and send message + RBuf8 message; + CleanupClosePushL(message); + message.CreateL(CTsScreenshotMsg::size() + sizeof(TInt)); + RDesWriteStream stream(message); + CleanupClosePushL(stream); + stream.WriteInt32L(RegisterScreenshotMessage); + CTsScreenshotMsg * screenshotMsg = CTsScreenshotMsg::NewLC(id, *bitmap, Low); + stream << (*screenshotMsg); + CleanupStack::PopAndDestroy(screenshotMsg); + CleanupStack::PopAndDestroy(&stream); + User::LeaveIfError(SendMessage(message)); + CleanupStack::PopAndDestroy(&message); + mCache.AppendL(bitmap); + CleanupStack::Pop(bitmap); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/src/tsscreenshotplugin.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/src/tsscreenshotplugin.rss Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2008 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: ECOM registration file +* +*/ + + +#include + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = 0x200267AE; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x10281924; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x200267AE; + version_no = 1; + display_name = "tsscreenshotplugin"; + default_data = ""; + opaque_data = ""; + } + }; + } + }; + } diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/tsrc/t_screenshotplugin/t_screenshotplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/tsrc/t_screenshotplugin/t_screenshotplugin.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,158 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include + +#include "t_screenshotplugin.h" +#include "tstaskmonitorglobals.h" +#include "tsscreenshotmsg.h" + + +const int testTimeout(10000); +const int homescreenUID(0x20022F35); +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +class CScreenshotPluginClient: public CWsGraphic +{ +public: + static CScreenshotPluginClient* NewLC(MScreenshotObserver& observer) + { + CScreenshotPluginClient* self = new (ELeave)CScreenshotPluginClient(observer); + CleanupStack::PushL(self); + self->BaseConstructL(TUid::Uid(0x200267AE), KNullDesC8); + return self; + } + +private: + CScreenshotPluginClient(MScreenshotObserver& observer) + :mObserver(observer) + {} + + void HandleMessage(const TDesC8& data) + {TRAP_IGNORE(HandleMessageL(data));} + + void HandleMessageL(const TDesC8& data) + { + RDesReadStream msgStream(data); + CleanupClosePushL(msgStream); + if(RegisterScreenshotMessage != msgStream.ReadInt32L()) { + User::Leave(KErrNotSupported); + } + + //parse msg to ACK provider ASAP and be sure that bitmap still exists + CTsScreenshotMsg* screenshotMsg = CTsScreenshotMsg::NewLC(msgStream); + SendMessage(data); + + //reset stream + msgStream.Close(); + msgStream.Open(data); + + //forward stream to storage + mObserver.ScreenshotTaken(screenshotMsg->windowGroupId(), + screenshotMsg->screenshot().Handle(), + 0, + screenshotMsg->priority()); + + CleanupStack::PopAndDestroy(screenshotMsg); + CleanupStack::PopAndDestroy(&msgStream); + } + + void OnReplace() + {} + +private: + MScreenshotObserver &mObserver; +}; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +T_Screenshotplugin::T_Screenshotplugin() : testUi("test") +{ + testUi.show(); +} + +void T_Screenshotplugin::testPlugin() +{ + const bool appMovingOperations [] = {false, true, false}; + QEventLoop loop; + connect(this, + SIGNAL(screenshotTaken(int, int, int, int)), + &loop, + SLOT(quit())); + + CScreenshotPluginClient::NewLC(*this);//create plugin client. test doesnt need pointer + + //just move tested app to foreground + QTimer::singleShot(testTimeout, &loop, SLOT(quit())); + moveApp(homescreenUID, true); + loop.exec(); + + //!!!!Tested application should be in foreground!!!!!! + //Move tested app foreground/background and wait for screenshot/timeout + for (int iter(0), count(sizeof(appMovingOperations)/sizeof(bool)); iter < count; ++iter) { + QSignalSpy spy(this, SIGNAL(screenshotTaken(int, int, int, int))); + QTimer::singleShot(testTimeout, &loop, SLOT(quit())); + moveApp(homescreenUID, appMovingOperations[iter]); + loop.exec(); + QTest::qWait(4000); + QCOMPARE(spy.count(), 1); + + } + //!!!!Tested application should be in background!!!!!! + QSignalSpy spy(this, SIGNAL(screenshotTaken(int, int, int, int))); + QTimer::singleShot(testTimeout, &loop, SLOT(quit())); + moveApp(homescreenUID, false); + loop.exec(); + QCOMPARE(spy.count(), 0); + + CleanupStack::PopAndDestroy();//destroy client +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void T_Screenshotplugin::ScreenshotTaken(int a, int b, int c, int d) +{ + emit screenshotTaken(a, b, c, d); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void T_Screenshotplugin::moveApp(int uid, bool foreground) +{ + TApaTaskList taskList(QApplication::desktop()->winId()->ControlEnv()->WsSession()); + TApaTask task(taskList.FindApp(TUid::Uid(uid))); + if ( task.Exists() ) + { + foreground ? task.BringToForeground() : task.SendToBackground(); + } +} + +QTEST_MAIN(T_Screenshotplugin) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/tsrc/t_screenshotplugin/t_screenshotplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/tsrc/t_screenshotplugin/t_screenshotplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ +#ifndef T_SCREENSHOTPLUGIN_H +#define T_SCREENSHOTPLUGIN_H + +#include +#include +class MScreenshotObserver +{ +public: + virtual void ScreenshotTaken(int, int, int, int) =0; +}; +/** +* @test Test class for Screenshotplugin +*/ +class T_Screenshotplugin : public QObject, + public MScreenshotObserver +{ + Q_OBJECT + +public: + T_Screenshotplugin(); + +private slots: + void testPlugin(); + +signals: + void screenshotTaken(int, int, int, int); + +private: + void ScreenshotTaken(int, int, int, int); + void moveApp(int, bool =false); + QLabel testUi; + +}; + +#endif //T_SCREENSHOTPLUGIN_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/tsrc/t_screenshotplugin/t_screenshotplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/tsrc/t_screenshotplugin/t_screenshotplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +# +# 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: +# + +TEMPLATE = app + +QT += testlib +CONFIG += console + +INCLUDEPATH += . \ + ../../../inc \ + +HEADERS += t_screenshotplugin.h \ + ../../../utils/inc/tsscreenshotmsg.h + +SOURCES += t_screenshotplugin.cpp \ + ../../../utils/src/tsscreenshotmsg.cpp + + +symbian { + LIBS += -lws32 \ + -lfbscli \ + -lestor \ + -lapgrfx \ + + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA=1 +} + +coverage { + DEFINES += COVERAGE_MEASUREMENT + DEFINES += QT_NO_DEBUG # omit ASSERTS in coverage measurements +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/screenshotplugin/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/screenshotplugin/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS += ../../screenshotplugin \ + t_screenshotplugin diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/hsdataobservertask.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/hsdataobservertask.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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: +* +*/ +#ifndef DATAOBSERVERTASK_H +#define DATAOBSERVERTASK_H +#include "tsdataobserver.h" +#include +class CHsDataObserverTask: public CTsDataObserver +{ +public: + ~CHsDataObserverTask(); + static void ExecuteLD(MTsDataObserverStorage& storage,const RMessage2& msg); + +private: + CHsDataObserverTask(MTsDataObserverStorage& storage, const RMessage2& msg); + void DataChanged(); + void Cancel(const RMessage2& reason); + TBool IsParent(const CSession2*session); + +private: + MTsDataObserverStorage& mStorage; + const RMessage2 mMsg; + TBool mDataChanged; +}; +#endif //DATAOBSERVERTASK_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/hsdataprovidertask.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/hsdataprovidertask.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,27 @@ +/* +* 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: +* +*/ +#ifndef DATAPROVIDERTASK_H +#define DATAPROVIDERTASK_H + +#include "tsdataprovider.h" + +class HsDataProviderTask { +public: + static void ExecuteL(const MTsDataProvider& provider, const RMessage2& msg); +}; + +#endif //DATAPROVIDER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/hsrunningappserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/hsrunningappserver.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,93 @@ +/* +* 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: +* +*/ +#ifndef RUNNINGAPPSERVER_H +#define RUNNINGAPPSERVER_H + +// INCLUDES +#include +#include +#include +#include "tsdataobserver.h" + +class CTsResourceManager; +class CTsWindowGroupsMonitor; +class MTsModel; +class CTsRunningAppModel; +class CTsStorage; +class CTsSerializedDataProvider; +class CTsServiceProvider; + +/** + * CRunningAppServer + * + */ +class CRunningAppServer : public CServer2, + public MTsDataObserver, + public MTsDataObserverStorage +{ +public: + /** + * Destructor. + */ + ~CRunningAppServer(); + + /** + * Two-phased constructor. + */ + static CRunningAppServer* NewLC(); + +public: //MHsDataObserver + void DataChanged(); + +public: //MHsDataObserverStorage + void PushL(CTsDataObserver*); + void Pop(CTsDataObserver*); + void Cancel(const RMessage2&); + void Invalidate(const CSession2* session); + +private: + /** + * Constructor for performing 1st stage construction + */ + CRunningAppServer(); + + /** + * Default constructor for performing 2nd stage construction + */ + void ConstructL(); + + /** + * Interface implementation + * @see CServer2::NewSessionL(const TVersion&, const RMessage2&) + */ + CSession2* NewSessionL(const TVersion& version, const RMessage2& message) const; + + void addProviders(RPointerArray &dst, const CTsServiceProvider& serviceProvider); + +private: + RPointerArray mObservers; + RWsSession mWsSession; + CTsResourceManager* mResources; + CTsWindowGroupsMonitor* mMonitor; + CTsSerializedDataProvider* mSerializer; + CTsStorage* mStorage; + CTsServiceProvider* mServiceProvider; + CTsRunningAppModel* mAppsModel; + CBase *mBacksteppingEngine; +}; + +#endif // RUNNINGAPPSERVER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/hsrunningappsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/hsrunningappsession.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,76 @@ +/* +* 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: +* +*/ +#ifndef RUNNINGAPPSESSION_H +#define RUNNINGAPPSESSION_H + +// INCLUDES +#include +#include +#include "tsdataobserver.h" +#include "tsdataprovider.h" +#include "tsdatastorage.h" +/** + * CActivitySession + * + */ +class CRunningAppSession : public CSession2 +{ +public: + // Constructors and destructor + + /** + * Destructor. + */ + ~CRunningAppSession(); + + /** + * Two-phased constructor. + * @param fileSession - initialized file system session + * @param taskStorage - global observers storage + * @param storage - data storage + */ + static CRunningAppSession* NewL(MTsDataObserverStorage& observerStorage, + const MTsDataProvider& dataProvider, + const TArray &dataStorages); + +private: + + /** + * Constructor for performing 1st stage construction + */ + CRunningAppSession(MTsDataObserverStorage& observerStorage, + const MTsDataProvider& dataProvider); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(const TArray &dataStorages); + +private: + /** + * Implements interface + * @see void CSession2::ServiceL(const RMessage2&) + */ + void ServiceL(const RMessage2& message); + +private: + MTsDataObserverStorage& mObserverStorage; + const MTsDataProvider& mDataProvider; + RPointerArray mDataStorages; +}; + +#endif // RUNNINGAPPSESSION_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsdatalist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsdatalist.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2008 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: Non-closeable app list class + * +*/ + + +#ifndef TSDATALIST_H +#define TSDATALIST_H + +#include +#include +#include "tsentry.h" +#include "tsdatastorage.h" +#include "tsdataobserver.h" +#include + +class CApaWindowGroupName; +class CFbsBitmap; + +NONSHARABLE_CLASS( CTsDataList ) : public CTsWindowGroupsObserver, + public MTsDataStorage + { +public: + static CTsDataList* NewL(MTsResourceManager& resources, + MTsWindowGroupsMonitor &monitor, + MTsDataObserver& observer); + + ~CTsDataList(); + +private: + CTsDataList(MTsResourceManager& resources, + MTsWindowGroupsMonitor &monitor, + MTsDataObserver& observer); + + void ConstructL(); + +public: + const RTsFswArray& Data() const; + + void HandleWindowGroupChanged(MTsResourceManager &, + const TArray &); + + TBool IsHiddenUid( TUid uid ); + + TBool isSupported(TInt function) const; + void handleDataL(TInt function,RReadStream& dataStream); + +private: + void registerScreenshotL(RReadStream& dataStream); + void unregisterScreenshotL(RReadStream& dataStream); + void changeVisibilityL(RReadStream& dataStream); + void CollectAppsL(RTsFswArray& appsList, + const TArray &wgList); + + void AddEntryL(const TTsEntryKey& key, + const TUid& appUid, + CApaWindowGroupName* wgName, + RTsFswArray& newList ); + + TBool ConsiderOldDataL( const TTsEntryKey& key ); + + HBufC* FindAppNameLC(CApaWindowGroupName* windowName, + const TUid& appUid, + TInt wgId ); + + void FitDataToList( RTsFswArray& listToFit); + + TBool CheckIfExists(const CTsEntry& entry, + const RTsFswArray& newList) const; + + CFbsBitmap* GetAppIconL(const TUid& aAppUid); + + TInt FindEntry(const RTsFswArray& list, const TTsEntryKey& key ) const; + + TBool EstablishOrder(const RArray& keyList); + + TTsEntryKey GenerateKeyL(TInt); + + void HideEntryIfNotAllowed(CTsEntry* entry); + + TBool UpdateEntryData(const RTsFswArray& list); + + void RebuildVisibleDataListL(); + + CFbsBitmap* HbIcon2CFbsBitmapL(const HbIcon& icon); +private: + /** + * Resource manager. Not own + */ + MTsResourceManager& mResources; + + MTsDataObserver &mObserver; + + RTsFswArray mData; // current fsw content, i.e. the task list + RTsFswArray mVisibleData; + + // list of hidden uids + RArray mHiddenUids; + + // default icon + CFbsBitmap* mDefaultIcon; + }; + +#endif //TSDATALIST_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsdataprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsdataprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +/* +* 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: +* +*/ +#ifndef DATAPROVIDER_H +#define DATAPROVIDER_H + +#include +class MTsDataProvider { +public: + virtual const TDesC8& Data() const = 0; +}; + +#endif //DATAPROVIDR_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsdatastorage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsdatastorage.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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: +* +*/ +#ifndef DATASTORAGE_H +#define DATASTORAGE_H + +#include +#include "tstaskmonitorglobals.h" +class CFbsBitmap; +class MTsDataStorage { +public: + virtual TBool isSupported(TInt function) const =0; + virtual void handleDataL(TInt function, RReadStream& dataStream) =0; +}; + +#endif //DATASTORAGE_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsdatatask.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsdatatask.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,28 @@ +/* +* 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: +* +*/ +#ifndef TSDATATASK_H +#define TSDATATASK_H +#include "tstaskmonitorglobals.h" +#include "tsdatastorage.h" +class TsDataTask +{ +public: + static void ExecuteL(const TArray &dataStorages, + const RMessage2& msg); +}; + +#endif //TSDATATASK_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef TSMODEL_H +#define TSMODEL_H + +#include +#include "tsmodelitem.h" + +class MTsModelObserver; +class MTsModel +{ +public: + virtual TInt count() const = 0; + TTsModelItem itemL(TInt offset) const; + virtual void setObserver(MTsModelObserver *observer) = 0; + +protected: //data access. should be used by TModelItem + virtual const TDesC& displayNameL(TInt offset) const = 0; + virtual TInt iconHandleL(TInt offset) const = 0; + virtual TTime timestampL(TInt offset) const = 0; + virtual TTsModelItemKey keyL(TInt offset) const = 0; + virtual TBool isActiveL(TInt offset) const = 0; + virtual TBool isClosableL(TInt offset) const = 0; + +protected: //operations execution + virtual TBool closeL(TTsModelItemKey key) const = 0; + virtual TBool launchL(TTsModelItemKey key) const = 0; + + friend class TTsModelItem; +}; + +#endif //TSMODEL_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsmodelitem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsmodelitem.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ +#ifndef TSMODELITEM_H +#define TSMODELITEM_H + +#include + + +#include "tsmodelitemkey.h" + +class MTsModel; + +class TTsModelItem { +public: + TTsModelItem(const MTsModel& model, TInt offset); + TTsModelItem(const TTsModelItem& item); + const TDesC& displayNameL() const; + TInt iconHandleL() const; + TTime timestampL() const; + TTsModelItemKey keyL() const; + TBool isActiveL() const; + TBool isClosableL() const; + TBool closeL() const; + TBool launchL() const; + +public: + void ExternalizeL(RWriteStream& stream) const; + +private: + void validateL() const; + +private: + const MTsModel& mModel; + const TInt mIndex; +}; + +#endif //TSMODELITEM_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsmodelitemkey.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsmodelitemkey.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ +#ifndef TSMODELITEMKEY_H +#define TSMODELITEMKEY_H + +#include +#include + +typedef TInt TTsKey; + +class TTsModelItemKey +{ +public: + static TInt size(); + TTsModelItemKey(); + TTsModelItemKey(TTsKey key, TInt root); + TTsModelItemKey(const TTsModelItemKey &key); + TTsModelItemKey& operator =(const TTsModelItemKey& key); + TBool operator == (const TTsModelItemKey key) const; + TInt key() const; + void ExternalizeL(RWriteStream& stream) const; + void InternalizeL(RReadStream& stream); + +private: + TTsKey mKey; + TInt mRoot; +}; + +#endif //TSMODELITEMKEY_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsmodelitemkeymsg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsmodelitemkeymsg.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ + +#ifndef TSMODELITEMKEYMSG_H +#define TSMODELITEMKEYMSG_H +#include +#include +#include "tsmodelitemkey.h" + +class CTsModelItemKeyMsg: public CBase +{ +public: + static CTsModelItemKeyMsg* NewLC(RReadStream& stream); + static TInt size(); + ~CTsModelItemKeyMsg(); + TTsModelItemKey key() const; + void InternalizeL(RReadStream &stream); + +private: + CTsModelItemKeyMsg(); + void ConstructL(RReadStream &stream); + +private: + TTsModelItemKey mKey; +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsmodelobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsmodelobserver.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,31 @@ +/* +* 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: +* +*/ +#ifndef TSMODELOBSERVER_H +#define TSMODELOBSERVER_H + +#include + +class MTsModel; +class TTsModelItem; + +class MTsModelObserver { +public: + virtual void dataChanged(MTsModel &model) = 0; + virtual void dataChanged(const TTsModelItem &item) = 0; +}; + +#endif //TSMODELOBSERVER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsrunningappmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsrunningappmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,77 @@ +/* +* 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: +* +*/ +#ifndef TSRUNNINGAPPMODEL_H +#define TSRUNNINGAPPMODEL_H + +#include "tsmodel.h" +#include "tsdatastorage.h" +#include "tsdataobserver.h" + +#include + +class CTsDataList; +class CTsScreenshotProvider; + +NONSHARABLE_CLASS(CTsRunningAppModel) : public CBase, public MTsModel, public MTsDataStorage, public MTsDataObserver +{ + +public: + static CTsRunningAppModel *NewL(MTsResourceManager &resources, MTsWindowGroupsMonitor &monitor); + static CTsRunningAppModel *NewLC(MTsResourceManager &resources, MTsWindowGroupsMonitor &monitor); + + ~CTsRunningAppModel(); + +private: + CTsRunningAppModel(MTsResourceManager &resources); + void ConstructL(MTsResourceManager &resources, MTsWindowGroupsMonitor &monitor); + +// MHsDataObserver interface implementation +public: + virtual void DataChanged(); + +// MTsDataStorage interface implementation +public: + TBool isSupported(TInt function) const; + void handleDataL(TInt function, RReadStream& dataStream); + +public: + virtual TInt count() const; + virtual void setObserver(MTsModelObserver *observer); + +public: + virtual const TDesC& displayNameL(TInt offset) const; + virtual TInt iconHandleL(TInt offset) const; + virtual TTime timestampL(TInt offset) const; + virtual TTsModelItemKey keyL(TInt offset) const; + virtual TBool isActiveL(TInt offset) const; + virtual TBool isClosableL(TInt offset) const; + +public: + virtual TBool closeL(TTsModelItemKey key) const; + virtual TBool launchL(TTsModelItemKey key) const; + +private: // owned + CTsDataList *mDataList; + +private: // not owned + MTsModelObserver *mObserver; + CTsScreenshotProvider *mScreenshotProvider; + MTsResourceManager &mResources; + +}; + +#endif //TSRUNNINGAPPMODEL_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsscreenshotprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsscreenshotprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +/* +* 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: +* +*/ +#ifndef TSSCREENSHOTPROVIDER_H +#define TSSCREENSHOTPROVIDER_H +#include "tsdatastorage.h" +#include + +class CTsScreenshotProvider: public CWsGraphic +{ +public: + static CTsScreenshotProvider* NewL(MTsDataStorage&); +private: + CTsScreenshotProvider(MTsDataStorage&); + void HandleMessage(const TDesC8&); + void HandleMessageL(const TDesC8&); + void OnReplace(); +private: + MTsDataStorage& mStorage; +}; + +#endif //TSSCREENSHOTTASK_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsserializeddataprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsserializeddataprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ +#ifndef SERIALIZEDDATAPROVIDER_H +#define SERIALIZEDDATAPROVIDER_H + +#include "tsdataobserver.h" +#include "tsdataprovider.h" +#include "tsmodelobserver.h" + +class RWriteStream; + +class CTsSerializedDataProvider: public CBase, + public MTsModelObserver, + public MTsDataProvider +{ +public: + static CTsSerializedDataProvider* NewL(MTsDataObserver &observer); + ~CTsSerializedDataProvider(); + const TDesC8& Data() const; + void dataChanged(MTsModel &model); + void dataChanged(const TTsModelItem &item); + +private: + CTsSerializedDataProvider(MTsDataObserver& observer); + void serializeModel(const MTsModel &src); + void serializeModelL(const MTsModel &src); + void serializeModelL(RWriteStream& dst, const MTsModel &src); + +private: + MTsDataObserver& mObserver; + RBuf8 mData; + +}; + +#endif //SERIALIZEDDATAPROVIDER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsservice.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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: +* +*/ +#ifndef TSSERVICE_H +#define TSSERVICE_H + +#include + +#include "tsmodel.h" +#include "tsdataobserver.h" + +class QObject; +class TsAbstractModel; + +class CTsService: public CBase, + public MTsModel, + public MTsDataObserver +{ +public: + static CTsService* NewLC(QObject* model); + ~CTsService(); + +public: //from MTsDataObserver + void DataChanged(); + +public: //from MTsModel + TInt count() const; + void setObserver(MTsModelObserver *observer); + +protected: //from MTsModel + const TDesC& displayNameL(TInt offset) const; + TInt iconHandleL(TInt offset) const; + TTime timestampL(TInt offset) const; + TTsModelItemKey keyL(TInt offset) const; + TBool isActiveL(TInt offset) const; + TBool isClosableL(TInt offset) const; + TBool closeL(TTsModelItemKey key) const; + TBool launchL(TTsModelItemKey key) const; + +private: + CTsService(); + void ConstructL(QObject* model); + TInt intValueL(TInt offset, const char *key) const; + TTime timeValueL(TInt offset, const char *key) const; + const TDesC& stringValueL(TInt offset, const char *key) const; +private: + QObject *mModel; + QObject *mServiceObserver; + MTsModelObserver *mModelObserver; + HBufC *mBuffer; +}; +#endif //TSSERVICE_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsserviceobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsserviceobserver.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +/* +* 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: +* +*/ +#ifndef TSSERVICEOBSERVER_H +#define TSSERVICEOBSERVER_H +#include + +#include "tsdataobserver.h" +class TsServiceObserver: public QObject +{ + Q_OBJECT + +public: + TsServiceObserver(MTsDataObserver& observer); + +public slots: + void dataChanged(); + +private: + MTsDataObserver &mObserver; +}; +#endif //TSSERVICEOBSERVER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsservicesprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsservicesprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ +#ifndef TSSERVICESPROVIDER_H +#define TSSERVICESPROVIDER_H + +#include "tsmodel.h" +#include "tsservicesproviderconfig.h" + +class CTsService; + +class CTsServiceProvider: public CBase +{ +public: + static CTsServiceProvider* NewL(const CTsServiceProviderConfig& config); + ~CTsServiceProvider(); + MTsModel& operator[](TInt offset) const; + TInt count() const; + +private: + CTsServiceProvider(); + void Construct(const CTsServiceProviderConfig& config); + +private: + RPointerArray mServices; +}; +#endif //TSSERVICESPROVIDER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsservicesproviderconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsservicesproviderconfig.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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: +* +*/ +#ifndef TSSERVICESPROVIDERCONFIG_H +#define TSSERVICESPROVIDERCONFIG_H + +#include +class QObject; +class CTsServiceProviderConfig: public CBase +{ +public: + static CTsServiceProviderConfig* NewLC(); + ~CTsServiceProviderConfig(); + + TInt count() const; + QObject* loadL(TInt offset)const; +private: + CTsServiceProviderConfig(); + void ConstructL(); + +private: + RPointerArray mServices; +}; + +#endif //TSSERVICESPROVIDERCONFIG_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/inc/tsstorage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/inc/tsstorage.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,77 @@ +/* +* 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: +* +*/ +#ifndef TSSTORAGE_H +#define TSSTORAGE_H +#include + +#include "tsmodel.h" +#include "tsmodelobserver.h" +#include "tsdataobserver.h" +#include "tsdatastorage.h" + +class CTsStorage: public CBase, + public MTsModel, + public MTsModelObserver, + public MTsDataObserver, + public MTsDataStorage +{ +public: + static CTsStorage* NewL(const TArray &dataProviders); + ~CTsStorage(); + +private: + CTsStorage(); + void ConstructL(const TArray &dataProviders); + TInt resetModel(); + void resetModelL(); + void pullDataL(const MTsModel& src); + void reorderDataL(); + +public://from MTsModelObserver + void dataChanged(MTsModel &model); + void dataChanged(const TTsModelItem &item); + +public://from MTsModel + TInt count() const; + void setObserver(MTsModelObserver *observer); + +private://from MTsModel + const TDesC& displayNameL(TInt offset) const; + TInt iconHandleL(TInt offset) const; + TTime timestampL(TInt offset) const; + TTsModelItemKey keyL(TInt offset) const; + TBool isActiveL(TInt offset) const; + TBool isClosableL(TInt offset) const; + TBool closeL(TTsModelItemKey key) const; + TBool launchL(TTsModelItemKey key) const; + TTsModelItem findL(TTsModelItemKey key) const; + +public://from MTsDataObserver + void DataChanged(); + +public://from MTsDataStorage + TBool isSupported(TInt function) const; + void handleDataL(TInt function, RReadStream& dataStream); + +private: + RPointerArray mDataProviders; + RArray mData; + MTsModelObserver* mDataObserver; + +}; + +#endif //TSSTORAGE_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/server.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/server.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,107 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = hsrunningappmonitor +CONFIG += hb mobility +MOBILITY = serviceframework + +myrssrules = \ +"hidden = KAppIsHidden;" +RSS_RULES += myrssrules + +INCLUDEPATH += inc \ + ../inc \ + ../../inc \ + ../utils/inc \ + ../backstepping/inc \ + +SOURCES += src/hsdataobservertask.cpp \ + src/hsdataprovidertask.cpp \ + src/hsrunningappserver.cpp \ + src/hsrunningappsession.cpp \ + src/main.cpp \ + src/tsdatalist.cpp \ + src/tsdatatask.cpp \ + src/tsscreenshotprovider.cpp \ + src/tsmodelitemkey.cpp \ + src/tsmodelitem.cpp \ + src/tsmodel.cpp \ + src/tsrunningappmodel.cpp \ + src/tsstorage.cpp \ + src/tsserializeddataprovider.cpp \ + src/tsservice.cpp \ + src/tsservicesprovider.cpp \ + src/tsservicesproviderconfig.cpp \ + src/tsserviceobserver.cpp \ + src/tsmodelitemkeymsg.cpp \ + ../utils/src/tsentrykey.cpp \ + ../utils/src/tsentrykeygenerator.cpp \ + ../utils/src/tsentry.cpp \ + ../utils/src/tsscreenshotmsg.cpp \ + ../utils/src/tsunregscreenshotmsg.cpp \ + ../utils/src/tsvisibilitymsg.cpp + + +HEADERS += inc/hsdataobservertask.h \ + inc/tsdataprovider.h \ + inc/hsdataprovidertask.h \ + inc/hsrunningappserver.h \ + inc/hsrunningappsession.h \ + inc/tsdatalist.h \ + inc/tsdatastorage.h \ + inc/tsdatatask.h \ + inc/tsscreenshotprovider.h \ + inc/tsmodelobserver.h \ + inc/tsmodelitemkey.h \ + inc/tsmodelitem.h \ + inc/tsmodel.h \ + inc/tsrunningappmodel.h \ + inc/tsstorage.h \ + inc/tsserializeddataprovider.h \ + inc/tsservice.h \ + inc/tsservicesprovider.h \ + inc/tsservicesproviderconfig.h \ + inc/tsserviceobserver.h \ + inc/tsmodelitemkeymsg.h \ + ../utils/inc/tsdataobserver.h \ + ../utils/inc/tsentry.h \ + ../utils/inc/tsentrykey.h \ + ../utils/inc/tsentrykeygenerator.h \ + ../utils/inc/tsutils.h \ + ../utils/inc/tsscreenshotmsg.h \ + ../utils/inc/tsunregscreenshotmsg.h \ + ../utils/inc/tsvisibilitymsg.h + + +LIBS += -lxqutils \ + -ltsutils \ + -ltsbackstepping \ + -laknicon \ + -lfbscli \ #for CFbsBitmap + -lestor \ #for RDesReadStream + -lxqutils \ + -lapgrfx \ #for CApaWindowGroupName + -lws32 \ #for CWsGraphic + -lapparc \ #for TApaAppInfo + -lcaclient \ #for getApplicationIcon + -lcone + +symbian { + TARGET.UID3 = 0x200267B0 + TARGET.CAPABILITY = All -TCB +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/hsdataobservertask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/hsdataobservertask.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,87 @@ +/* +* 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 "hsdataobservertask.h" +#include "tstaskmonitorglobals.h" +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CHsDataObserverTask::CHsDataObserverTask(MTsDataObserverStorage& storage, + const RMessage2& msg) +: + mStorage(storage), + mMsg(msg) +{ + // No implementation required +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CHsDataObserverTask::~CHsDataObserverTask() +{ + if (EFalse == mMsg.IsNull()) { + mMsg.Complete(mDataChanged ? KErrNone : KErrCancel); + } +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CHsDataObserverTask::ExecuteLD(MTsDataObserverStorage& storage,const RMessage2& msg) +{ + CTsDataObserver *self = new (ELeave)CHsDataObserverTask(storage, msg); + CleanupStack::PushL(self); + storage.PushL(self); + CleanupStack::Pop(self); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CHsDataObserverTask::DataChanged() +{ + mDataChanged = ETrue; + mStorage.Pop(this); + delete this; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CHsDataObserverTask::Cancel(const RMessage2& reason) +{ + if (CancelSubscribeRunningAppChanges == reason.Function() && + mMsg.Session() == reason.Session()) { + mStorage.Pop(this); + delete this; + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CHsDataObserverTask::IsParent(const CSession2* session) +{ + return mMsg.Session() == session; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/hsdataprovidertask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/hsdataprovidertask.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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 "hsdataprovidertask.h" +#include "tstaskmonitorglobals.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsDataProviderTask::ExecuteL(const MTsDataProvider& provider, const RMessage2& msg) +{ + switch (msg.Function()) { + case GetRunningAppInfo: + msg.WriteL(KRequestDataSizeOffset, TPckgBuf(provider.Data().Length())); + msg.Complete(KErrNone); + break; + + case FlushData: + if (provider.Data().Length() > msg.GetDesMaxLengthL(KRequestDataBufferOffset)) { + User::Leave(KErrCorrupt); + } + msg.WriteL(KRequestDataBufferOffset, provider.Data()); + msg.Complete(KErrNone); + break; + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/hsrunningappserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/hsrunningappserver.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,187 @@ +/* +* 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 +#include "tstaskmonitorglobals.h" +#include "hsrunningappserver.h" +#include "hsrunningappsession.h" +#include "tsbacksteppingactivation.h" + +#include "tsmodel.h" +#include "tsstorage.h" +#include "tsservicesprovider.h" +#include "tsserializeddataprovider.h" +#include "tsrunningappmodel.h" + +_LIT(KErrObserverExists, "Observer already exists"); +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRunningAppServer::CRunningAppServer() +: +CServer2(EPriorityStandard) +{ + // No implementation required +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRunningAppServer::~CRunningAppServer() +{ + delete mBacksteppingEngine; + delete mStorage; + delete mAppsModel; + delete mServiceProvider; + delete mSerializer; + delete mMonitor; + mObservers.ResetAndDestroy(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRunningAppServer* CRunningAppServer::NewLC() +{ + CRunningAppServer* self = new (ELeave) CRunningAppServer(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppServer::ConstructL() +{ + StartL(KRunningAppServerName); + User::LeaveIfError(mWsSession.Connect()); + mResources = CTsResourceManager::NewL(); + mMonitor = CTsWindowGroupsMonitor::NewL(*mResources); + + mSerializer = CTsSerializedDataProvider::NewL(*this); + + RPointerArray providers; + CleanupClosePushL(providers); + + mAppsModel = CTsRunningAppModel::NewL(*mResources, *mMonitor); + providers.AppendL(mAppsModel); + + CTsServiceProviderConfig *cfg = CTsServiceProviderConfig::NewLC(); + mServiceProvider = CTsServiceProvider::NewL(*cfg); + CleanupStack::PopAndDestroy(cfg); + addProviders(providers, *mServiceProvider); + + mStorage = CTsStorage::NewL(providers.Array()); + mStorage->setObserver(mSerializer); + CleanupStack::PopAndDestroy(&providers); + + // load initial data + mStorage->DataChanged(); + + TRAP_IGNORE(mBacksteppingEngine = CTsBacksteppingActivation::NewL(*mMonitor);) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSession2* CRunningAppServer::NewSessionL(const TVersion &, const RMessage2&) const +{ + RPointerArray dataStorages; + CleanupClosePushL(dataStorages); + dataStorages.AppendL(const_cast(this)->mAppsModel); + dataStorages.AppendL(const_cast(this)->mStorage); + CSession2* retVal = CRunningAppSession::NewL(*const_cast(this), + *const_cast(this)->mSerializer, + dataStorages.Array()); + CleanupStack::PopAndDestroy(&dataStorages); + return retVal; + +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppServer::DataChanged() +{ + while (0 < mObservers.Count()) { + mObservers[0]->DataChanged(); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppServer::PushL(CTsDataObserver* observer) +{ + ( 0 <= mObservers.Find(observer)) ? + User::Panic(KErrObserverExists, KErrAlreadyExists) : + mObservers.AppendL(observer); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppServer::Pop(CTsDataObserver* observer) +{ + const TInt offset(mObservers.Find(observer)); + if(0 <= offset) { + mObservers.Remove(offset); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppServer::Cancel(const RMessage2& reason) +{ + for (TInt iter(mObservers.Count() - 1); 0 <= iter; --iter) { + mObservers[iter]->Cancel(reason); + } + reason.Complete(KErrNone); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppServer::Invalidate(const CSession2* session) +{ + for (TInt iter(mObservers.Count() - 1); 0 <= iter; --iter) { + if(mObservers[iter]->IsParent(session)) { + delete mObservers[iter]; + mObservers.Remove(iter); + } + } +} + +// ----------------------------------------------------------------------------- +void CRunningAppServer::addProviders(RPointerArray &dst, + const CTsServiceProvider& serviceProvider) +{ + for (TInt offset(0); offset < serviceProvider.count(); ++offset) { + dst.Append(&serviceProvider[offset]); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/hsrunningappsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/hsrunningappsession.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,105 @@ +/* +* 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 "hsrunningappsession.h" +#include "tstaskmonitorglobals.h" + +#include "hsdataobservertask.h" +#include "hsdataprovidertask.h" +#include "tsdatatask.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRunningAppSession::CRunningAppSession(MTsDataObserverStorage& observerStorage, + const MTsDataProvider& dataProvider) +: + mObserverStorage(observerStorage), + mDataProvider(dataProvider) +{ + // No implementation required +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRunningAppSession::~CRunningAppSession() +{ + mObserverStorage.Invalidate(this); + mDataStorages.Close(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRunningAppSession* CRunningAppSession::NewL(MTsDataObserverStorage& observerStorage, + const MTsDataProvider& dataProvider, + const TArray &dataStorages) +{ + CRunningAppSession* self = new (ELeave) CRunningAppSession(observerStorage, + dataProvider); + CleanupStack::PushL(self); + self->ConstructL(dataStorages); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppSession::ConstructL(const TArray &dataStorages) +{ + for (TInt iter(0); iter < dataStorages.Count(); ++iter) { + mDataStorages.AppendL(dataStorages[iter]); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CRunningAppSession::ServiceL(const RMessage2& message) +{ + switch (message.Function()) { + case SubscribeRunningAppChanges: + CHsDataObserverTask::ExecuteLD(mObserverStorage, message); + break; + + case CancelSubscribeRunningAppChanges: + mObserverStorage.Cancel(message); + break; + + case GetRunningAppInfo: + case FlushData: + HsDataProviderTask::ExecuteL(mDataProvider, message); + break; + + case RegisterScreenshotMessage: + case UnregisterScreenshotMessage: + case VisibilityChange: + case OpenTaskMessage: + case CloseTaskMessage: + TsDataTask::ExecuteL(mDataStorages.Array(), message); + break; + + default: + message.Complete(CServer2::EBadMessageNumber); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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 + +#include "hsrunningappserver.h" +#include "tstaskmonitorglobals.h" +#include +#include + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // hide server from TaskSwitcher + CEikonEnv * env = CEikonEnv::Static(); + if(env) { + env->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNeverAtFront); + + CApaWindowGroupName *wgName = CApaWindowGroupName::NewLC(env->WsSession()); + wgName->SetHidden(ETrue); // hides us from FSW and protects us from OOM FW etc. + wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down + wgName->SetCaptionL(KRunningAppServerName); + wgName->SetWindowGroupName(env->RootWin()); + CleanupStack::PopAndDestroy(wgName); + } + + // maintain instance of caservice (needed for getting application icons) + QSharedPointer service = CaService::instance(); + + CServer2* serverObject = CRunningAppServer::NewLC(); + CleanupStack::Pop(serverObject); + + RSemaphore semaphore; + if (KErrNone == semaphore.OpenGlobal(KTsServerReadySemaphore)) { + semaphore.Signal(); + } + semaphore.Close(); + + int result = app.exec(); + + delete serverObject; + return result; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsdatalist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsdatalist.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,565 @@ +/* + * Copyright (c) 2008 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: File containing application list classes + * + */ + +//INCLUDES: +#include // for CleanupResetAndDestroyPushL +#include +#include +#include // avkon +#include // fbsbitmap +#include +#include +#include +#include +#include + +#include "tsdatalist.h" +#include "tsentrykeygenerator.h" +#include "tsscreenshotmsg.h" +#include "tsunregscreenshotmsg.h" +#include "tsvisibilitymsg.h" + +// size for the created app icons +const TInt KAppIconWidth = 128; +const TInt KAppIconHeight = 128; + +//uids to be hidden +const TUid KHsApplicationUid = { 0x20022F35 }; + +// ================= MEMBER FUNCTIONS ======================= + +// -------------------------------------------------------------------------- +/** + * Two-phased constructor. + */ +CTsDataList* CTsDataList::NewL(MTsResourceManager& resources, + MTsWindowGroupsMonitor &monitor, + MTsDataObserver& observer) +{ + CTsDataList* self = new (ELeave) CTsDataList(resources, monitor, observer); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +// -------------------------------------------------------------------------- +/** + * Constructor. + */ +CTsDataList::CTsDataList(MTsResourceManager& resources, + MTsWindowGroupsMonitor &monitor, + MTsDataObserver& observer) +: + CTsWindowGroupsObserver(monitor), + mResources(resources), + mObserver(observer) +{ +} + +// -------------------------------------------------------------------------- +/* + * Destructor + */ +CTsDataList::~CTsDataList() +{ + mData.ResetAndDestroy(); + mVisibleData.Close(); + mHiddenUids.Close(); + RFbsSession::Disconnect(); + RAknIconSrvClient::Disconnect(); + delete mDefaultIcon; +} + +// -------------------------------------------------------------------------- +/** + * Performs 2nd phase construction. + */ +void CTsDataList::ConstructL() +{ + BaseConstructL(); + mHiddenUids.AppendL(KHsApplicationUid); + User::LeaveIfError(RFbsSession::Connect()); + RAknIconSrvClient::Connect(); + mDefaultIcon = HbIcon2CFbsBitmapL(HbIcon("qtg_large_application")); +} + +// -------------------------------------------------------------------------- +/** + * Returns a reference to the current content. + * Also performs sanity checks, e.g. associates application icons + * when no screenshot has been received. + * @return ref to content array + */ +const RTsFswArray& CTsDataList::Data() const +{ + return mVisibleData; +} + +// -------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsWindowGroupsObserver HandleWindowGroupChanged + */ +void CTsDataList::HandleWindowGroupChanged(MTsResourceManager &, + const TArray &wgList) +{ + TRAP_IGNORE(RTsFswArray newAppsList; + CleanupResetAndDestroyPushL(newAppsList); + CollectAppsL(newAppsList, wgList); + FitDataToList(newAppsList); + CleanupStack::PopAndDestroy(&newAppsList); + ); +} + +// -------------------------------------------------------------------------- +/** + * Adds running apps to the list. + * @param appsList array to add to + */ +void CTsDataList::CollectAppsL(RTsFswArray& appsList, + const TArray &wgList) +{ + for (TInt i = 0; i < wgList.Count(); ++i) { + TTsEntryKey key; + TInt err = TsEntryKeyGeneraror::Generate(key, wgList[i].iId, wgList); + + //skip this entry if it is already on list or generate key failed + if (err!=KErrNone || FindEntry(appsList, key) >= 0) { + continue; + } + + // get window group name + CApaWindowGroupName* windowName = CApaWindowGroupName::NewLC(mResources.WsSession(), key.WindowGroupId()); + TUid appUid = windowName->AppUid(); + + // get screen number (-1=console, 0=main screen, 1=cover ui) + TInt appScreen = 0; + TInt scrNumErr = mResources.ApaSession().GetDefaultScreenNumber( appScreen, appUid ); + + if (appUid.iUid && !windowName->Hidden() && (appScreen == 0 || appScreen == -1) && scrNumErr == KErrNone ) { + AddEntryL(key, appUid, windowName, appsList); + } + + CleanupStack::PopAndDestroy(windowName); + } +} + +// -------------------------------------------------------------------------- +/** + * Called from CollectTasksL for each entry in the task list. + * @param key entry key + * @param appUid application uid + * @param wgName window group name or NULL + * @param newList list to add to + */ +void CTsDataList::AddEntryL(const TTsEntryKey& key, const TUid& appUid, + CApaWindowGroupName* wgName, RTsFswArray& newList) +{ + CTsEntry* entry = CTsEntry::NewLC(key, mObserver); + + // check if present in old list and if yes then take some of the old data + TBool found = ConsiderOldDataL(key); + + // if not present previously then find out app name + // and check if screenshot is already available + if (!found) { + entry->SetAppUid(appUid); + + HBufC* name = FindAppNameLC(wgName, appUid, key.WindowGroupId()); + if (name) { + entry->SetAppNameL(*name); + } + CleanupStack::PopAndDestroy(name); + + CFbsBitmap* iconBitmap = GetAppIconL(appUid); + //transfer ownership to entry + entry->SetAppIcon(iconBitmap); + } + + if (wgName) { + entry->SetCloseableApp(!wgName->IsSystem()); + } + + // add to new list, ownership is transferred + newList.AppendL(entry); + CleanupStack::Pop(entry); +} + +// -------------------------------------------------------------------------- +/** + * Checks if there is an entry for same app in the content list. + * If yes then it takes some of the data for the entry that + * will correspond to the same app in the refreshed content list. + * @param key new key in content list + * @return ETrue if app was found + */ +TBool CTsDataList::ConsiderOldDataL(const TTsEntryKey& key) +{ + for (TInt entryIdx = 0, oldCount = mData.Count(); entryIdx < oldCount; ++entryIdx) { + if (mData[entryIdx]->Key() == key) { + return ETrue; + } + } + return EFalse; +} + +// -------------------------------------------------------------------------- +/** + * Finds out the application name. + * @param windowName window group name or NULL + * @param appUId application uid + * @param wgId window group id + * @return application name, ownership transferred to caller + */ +HBufC* CTsDataList::FindAppNameLC(CApaWindowGroupName* windowName, const TUid& appUid, TInt wgId) +{ + //Retrieve the app name + TApaAppInfo info; + mResources.ApaSession().GetAppInfo(info, appUid); + TPtrC caption = info.iShortCaption; + + HBufC* tempName = 0; + if (!caption.Length() && windowName) // if not set - use thread name instead + { + if (windowName->Caption().Length()) { + tempName = windowName->Caption().AllocL(); + //put on cleanupstack after the if + } + else { + TThreadId threadId; + TInt err = mResources.WsSession().GetWindowGroupClientThreadId(wgId, threadId); + if (err == KErrNone) { + RThread thread; + CleanupClosePushL(thread); + err = thread.Open(threadId); + if (err == KErrNone) { + tempName = thread.Name().AllocL(); // codescanner::forgottoputptroncleanupstack + // tempName put on cleanupstack after the if + } + CleanupStack::PopAndDestroy(&thread); + } + } + } + else { + tempName = caption.AllocL(); + //put on cleanupstack after the if + } + CleanupStack::PushL(tempName); + return tempName; +} + +// -------------------------------------------------------------------------- +/** + * Fit existing class contained data list into give one. + * Data is being changed with application type consideration that is based + * on aConsiderWidgets param. + * Function removes or add entries into data depend on given list. + * @param listToFit list with actual data + */ +void CTsDataList::FitDataToList(RTsFswArray& listToFit) +{ + TBool changed = EFalse; + TInt listCount = listToFit.Count(); + TInt dataCount = mData.Count(); + + //remove items that dont't exists in newly collected list + for (TInt i = dataCount - 1; i >= 0; --i) { + if (!CheckIfExists(*mData[i], listToFit)) { + delete mData[i]; + mData.Remove(i); + changed = ETrue; + } + } + RArray allKeys; + + //add new items at start + for (TInt i = listToFit.Count() - 1; i >= 0; --i) { + allKeys.Insert(listToFit[i]->Key(), 0); + if (!CheckIfExists(*listToFit[i], mData)) { + HideEntryIfNotAllowed(listToFit[i]); + mData.Insert(listToFit[i], 0); + + TTime currentTimestamp; + currentTimestamp.UniversalTime(); + mData[0]->SetTimestamp(currentTimestamp); + + listToFit[i] = 0; + changed = ETrue; + } + } + //establish order + TBool orderChanged = EstablishOrder(allKeys); + + //update entries data + TBool dataChanged = UpdateEntryData(listToFit); + RebuildVisibleDataListL(); + if (changed || orderChanged || dataChanged) { + mObserver.DataChanged(); + } + allKeys.Close(); +} + +// -------------------------------------------------------------------------- +/** + * Checks if there is an entry for same app in the given list. + * @param entry entry + * @param newList ref to list + * @return ETrue if app was found + */ + +TBool CTsDataList::CheckIfExists(const CTsEntry& entry, const RTsFswArray& list) const +{ + TBool exists(EFalse); + TInt pos = FindEntry(list, entry.Key()); + if (pos >= 0) { + exists = ETrue; + } + return exists; +} + +// -------------------------------------------------------------------------- +/** + * Retrieves the bitmap for the icon of the given app. + * @param appUid application uid + * @return app CFbsBitmap + */ +CFbsBitmap* CTsDataList::GetAppIconL(const TUid& aAppUid) +{ + HbIcon icon = CaMenuIconUtility::getApplicationIcon(aAppUid.iUid, QSizeF(KAppIconWidth, KAppIconHeight)); + CFbsBitmap* iconBitmap = HbIcon2CFbsBitmapL(icon); + if (!iconBitmap) { + iconBitmap = new(ELeave) CFbsBitmap; + TInt err = KErrNotFound; + if(mDefaultIcon) { + err = iconBitmap->Duplicate(mDefaultIcon->Handle()); + } + if (KErrNone!=err) { + delete iconBitmap; + iconBitmap = NULL; + } + } + return iconBitmap; + } + +// -------------------------------------------------------------------------- +/** + * Converts HbIcon to CFbsBitmap + * @param icon icon to be coverted + * @return CFbsBitmap + */ +CFbsBitmap* CTsDataList::HbIcon2CFbsBitmapL(const HbIcon& icon) +{ + QIcon qicon = icon.qicon(); + QPixmap pixmap = qicon.pixmap(QSize(KAppIconWidth, KAppIconHeight)); + CFbsBitmap* retValue = NULL; + if (!pixmap.isNull()) { + retValue = pixmap.toSymbianCFbsBitmap(); + } + return retValue; +} +// -------------------------------------------------------------------------- +TBool CTsDataList::isSupported(TInt function) const +{ + return (RegisterScreenshotMessage == function || + UnregisterScreenshotMessage == function || + VisibilityChange == function); +} + +// -------------------------------------------------------------------------- +void CTsDataList::handleDataL(TInt function,RReadStream& dataStream) +{ + switch(function){ + case RegisterScreenshotMessage: + registerScreenshotL(dataStream); + break; + case UnregisterScreenshotMessage: + unregisterScreenshotL(dataStream); + break; + case VisibilityChange: + changeVisibilityL(dataStream); + break; + } +} + +// -------------------------------------------------------------------------- +void CTsDataList::registerScreenshotL(RReadStream& dataStream) +{ + CTsScreenshotMsg* msg = CTsScreenshotMsg::NewLC(dataStream); + const TInt pos = FindEntry(mData, GenerateKeyL(msg->windowGroupId())); + User::LeaveIfError(pos); + mData[pos]->SetScreenshotL(msg->screenshot(), msg->priority()); + CleanupStack::PopAndDestroy(msg); +} +// -------------------------------------------------------------------------- +void CTsDataList::unregisterScreenshotL(RReadStream& dataStream) +{ + + CTsUnregisterScreenshotMsg* msg = CTsUnregisterScreenshotMsg::NewLC(dataStream); + const TInt pos = FindEntry(mData, GenerateKeyL(msg->windowGroupId())); + User::LeaveIfError(pos); + mData[pos]->RemoveScreenshotL(); + CleanupStack::PopAndDestroy(msg); +} +// -------------------------------------------------------------------------- +void CTsDataList::changeVisibilityL(RReadStream& dataStream) +{ + CTsVisibilitMsg* msg = CTsVisibilitMsg::NewLC(dataStream); + const TInt pos = FindEntry(mData, GenerateKeyL(msg->windowGroupId())); + User::LeaveIfError(pos); + msg->visibility() == mData[pos]->GetVisibility() ? User::Leave(KErrInUse) : + mData[pos]->SetVisibility(msg->visibility()); + CleanupStack::PopAndDestroy(msg); + RebuildVisibleDataListL(); + mObserver.DataChanged(); +} + +// -------------------------------------------------------------------------- +/** + * Checks if given uid is on hidden list + * @param aUid uid to be checked + * @return ETrue if uid is on hidden list + */ +TBool CTsDataList::IsHiddenUid(TUid uid) +{ + return mHiddenUids.Find(uid) >= 0 ? ETrue : EFalse; +} + +// -------------------------------------------------------------------------- +/** + * Finds entry in array + * @param list list to find + * @param key finding key + * @return position or KErrNotFound + */ +TInt CTsDataList::FindEntry(const RTsFswArray& list, const TTsEntryKey& key) const +{ + TInt pos(KErrNotFound); + for (TInt entryIdx = 0; entryIdx < list.Count(); ++entryIdx) { + if (list[entryIdx]->Key() == key) { + pos = entryIdx; + break; + } + } + return pos; +} + +// -------------------------------------------------------------------------- +/** + * Establish entry order accridung to aKeyList, all keys MUST be in iData + * @param keyList reference key list + * @return ETrue if changes occured + */ +TBool CTsDataList::EstablishOrder(const RArray& keyList) +{ + TBool changed(EFalse); + TInt lastChangedItem(KErrNotFound); + __ASSERT_ALWAYS(mData.Count() == keyList.Count(), User::Panic(_L("EstablishOrder 1"), KErrBadHandle) ); + for (TInt i = 0; i < keyList.Count(); i++) { + const TTsEntryKey& currentdataKey = mData[i]->Key(); + const TTsEntryKey& referenceKey = keyList[i]; + if (!(currentdataKey == referenceKey)) { + TInt foundPos = FindEntry(mData, referenceKey); + __ASSERT_ALWAYS(foundPos>=0, User::Panic(_L("EstablishOrder 2"), KErrBadHandle) ); + CTsEntry* entry = mData[foundPos]; + mData.Remove(foundPos); + mData.Insert(entry, i); + changed = ETrue; + lastChangedItem = i; + } + } + + TTime currentTimestamp; + currentTimestamp.UniversalTime(); + for (TInt i = lastChangedItem; i >= 0; --i) { + mData[i]->SetTimestamp(currentTimestamp); + } + + return changed; +} + +// -------------------------------------------------------------------------- +/** + * Updates entry data on mData according to list + * @param list reference entires list + * @return ETrue if changes occured + */ +TBool CTsDataList::UpdateEntryData(const RTsFswArray& list) +{ + __ASSERT_ALWAYS(mData.Count() == list.Count(), User::Panic(_L("UpdateEntryData 1"), KErrBadHandle) ); + TBool changed(EFalse); + for (TInt i=0; iKey() == list[i]->Key(), User::Panic(_L("UpdateEntryData 12"), KErrBadHandle) ); + if(mData[i]->CloseableApp() != list[i]->CloseableApp()) { + mData[i]->SetCloseableApp(list[i]->CloseableApp()); + changed = ETrue; + } + } + } + return changed; +} + +// -------------------------------------------------------------------------- +/** + * Function generate task key using window group id + * @param wgId - window group id of running application + * @param entry key + */ +TTsEntryKey CTsDataList::GenerateKeyL(TInt wgId) +{ + RArray allWgIds; + CleanupClosePushL(allWgIds); + User::LeaveIfError(mResources.WsSession().WindowGroupList(0, &allWgIds)); + TTsEntryKey key; + User::LeaveIfError(TsEntryKeyGeneraror::Generate(key, wgId, allWgIds.Array())); + CleanupStack::PopAndDestroy(&allWgIds); + return key; +} + +// -------------------------------------------------------------------------- +/** + * Hides entrie if exist on mHiddenUids + * @param entry + */ +void CTsDataList::HideEntryIfNotAllowed(CTsEntry* entry) +{ + TUid uid = entry->AppUid(); + if(mHiddenUids.Find(uid) >= 0) { + entry->SetVisibility(Invisible); + } + +} + +void CTsDataList::RebuildVisibleDataListL() +{ + mVisibleData.Reset(); + + RArray visibleItems(mData.Count() ? mData.Count() : 1); + CleanupClosePushL(visibleItems); + for (TInt iter = 0; iter < mData.Count(); ++iter) { + if (Visible == mData[iter]->GetVisibility()) { + visibleItems.AppendL(iter); + } + } + + for (TInt iter = 0; iter < visibleItems.Count(); ++iter) { + mVisibleData.AppendL(mData[visibleItems[iter]]); + } + CleanupStack::PopAndDestroy(&visibleItems); +} +// end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsdatatask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsdatatask.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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 "tsdatatask.h" +#include +// ----------------------------------------------------------------------------- +void TsDataTask::ExecuteL(const TArray& dataStorages, const RMessage2& msg) +{ + TInt responseCode(KErrNotSupported); + for (TInt iter(0); iter < dataStorages.Count() && KErrNone != responseCode; ++iter) { + if (dataStorages[iter]->isSupported(msg.Function())) { + HBufC8 *data = HBufC8::NewLC(msg.GetDesLength(0)); + TPtr8 des(data->Des()); + msg.ReadL(0, des); + RDesReadStream dataStream(*data); + CleanupClosePushL(dataStream); + dataStorages[iter]->handleDataL(msg.Function(), dataStream); + CleanupStack::PopAndDestroy(&dataStream); + CleanupStack::PopAndDestroy(data); + + responseCode = KErrNone; + } + } + User::LeaveIfError(responseCode); + msg.Complete(responseCode); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,31 @@ +/* +* 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 "tsmodel.h" + +// ----------------------------------------------------------------------------- +/** + * Create shallow copy of model item + * @param offset - index of requested item + * @return reference to item + */ +TTsModelItem MTsModel::itemL(TInt offset) const +{ + if(count() <= offset) { + User::Leave(KErrOverflow); + } + return TTsModelItem(*this, offset); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsmodelitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsmodelitem.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,157 @@ +/* +* 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 "tsmodel.h" +// ----------------------------------------------------------------------------- +/** + * Constructor + * @param model - data owner + * @param offset - data index + */ +TTsModelItem::TTsModelItem(const MTsModel& model, TInt offset) +: +mModel(model), +mIndex(offset) +{} + +// ----------------------------------------------------------------------------- +/** + * Copy constructor + * @param item - template item + */ +TTsModelItem::TTsModelItem(const TTsModelItem& item) +: +mModel(item.mModel), +mIndex(item.mIndex) +{} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and retrieve display name data + * @return item display name + */ +const TDesC& TTsModelItem::displayNameL() const +{ + validateL(); + return mModel.displayNameL(mIndex); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and retrieve icon handle ( CFbsBitmap handle ) + * @return item icon handle + */ +TInt TTsModelItem::iconHandleL() const +{ + validateL(); + return mModel.iconHandleL(mIndex); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and retrieve entry key + * @return item key + */ +TTsModelItemKey TTsModelItem::keyL() const +{ + validateL(); + return mModel.keyL(mIndex); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and retrieve entry timestamp + * @return item timestamp + */ +TTime TTsModelItem::timestampL() const +{ + validateL(); + return mModel.timestampL(mIndex); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and retrieve activity status + * @return activity status + */ +TBool TTsModelItem::isActiveL() const +{ + validateL(); + return mModel.isActiveL(mIndex); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and retrieve closable status + * @return closable status + */ +TBool TTsModelItem::isClosableL() const +{ + validateL(); + return mModel.isClosableL(mIndex); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and forward close request to its owner + * @return EFalse on failure + */ +TBool TTsModelItem::closeL() const +{ + validateL(); + return mModel.closeL(keyL()); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance and forward launch request to its owner + * @return EFalse on failure + */ +TBool TTsModelItem::launchL() const +{ + validateL(); + return mModel.launchL(keyL()); +} + +// ----------------------------------------------------------------------------- +/** + * Validate item instance + */ +void TTsModelItem::validateL() const +{ + if (mModel.count() <= mIndex) { + User::Leave(KErrOverflow); + } +} + +// ----------------------------------------------------------------------------- +/** + * Serialize item into destination stream + * @param stream - output stream + */ + +void TTsModelItem::ExternalizeL(RWriteStream& stream) const +{ + stream.WriteInt32L(displayNameL().Length()); + if (0 < displayNameL().Length()) { + stream << displayNameL(); + } + stream.WriteInt32L(iconHandleL()); + stream.WriteInt32L(TTsModelItemKey::size()); + stream << keyL(); + stream.WriteInt32L(isActiveL()); + stream.WriteInt32L(isClosableL()); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsmodelitemkey.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsmodelitemkey.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,76 @@ +/* +* 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 "tsmodelitemkey.h" +// ----------------------------------------------------------------------------- +TInt TTsModelItemKey::size() +{ + return sizeof(TInt) * 2; +} +// ----------------------------------------------------------------------------- +TTsModelItemKey::TTsModelItemKey() +: + mKey(0), + mRoot(0) +{} + +// ----------------------------------------------------------------------------- +TTsModelItemKey::TTsModelItemKey(TTsKey key, TInt root) +: + mKey(key), + mRoot(root) +{} + +// ----------------------------------------------------------------------------- +TTsModelItemKey::TTsModelItemKey(const TTsModelItemKey &key) +: + mKey(key.mKey), + mRoot(key.mRoot) +{} + +// ----------------------------------------------------------------------------- +TTsModelItemKey& TTsModelItemKey::operator =(const TTsModelItemKey& key) +{ + mKey = key.mKey; + mRoot = key.mRoot; + return (*this); +} + +// ----------------------------------------------------------------------------- +TBool TTsModelItemKey::operator == (const TTsModelItemKey key) const +{ + return ( mKey == key.mKey && mRoot == key.mRoot); +} + +// ----------------------------------------------------------------------------- +TInt TTsModelItemKey::key() const +{ + return mKey; +} + +// ----------------------------------------------------------------------------- +void TTsModelItemKey::ExternalizeL(RWriteStream& stream) const +{ + stream.WriteInt32L(mKey); + stream.WriteInt32L(mRoot); +} + +// ----------------------------------------------------------------------------- +void TTsModelItemKey::InternalizeL(RReadStream& stream) +{ + mKey = stream.ReadInt32L(); + mRoot = stream.ReadInt32L(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsmodelitemkeymsg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsmodelitemkeymsg.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ +#include +#include "tsmodelitemkeymsg.h" + +// ----------------------------------------------------------------------------- +CTsModelItemKeyMsg* CTsModelItemKeyMsg::NewLC(RReadStream& stream) +{ + CTsModelItemKeyMsg* self = new (ELeave)CTsModelItemKeyMsg(); + CleanupStack::PushL(self); + self->ConstructL(stream); + return self; +} + +// ----------------------------------------------------------------------------- +CTsModelItemKeyMsg::~CTsModelItemKeyMsg() +{} + +// ----------------------------------------------------------------------------- +TTsModelItemKey CTsModelItemKeyMsg::key() const +{ + return mKey; +} + +// ----------------------------------------------------------------------------- +void CTsModelItemKeyMsg::InternalizeL(RReadStream &stream) +{ + stream >> mKey; +} + +// ----------------------------------------------------------------------------- +CTsModelItemKeyMsg::CTsModelItemKeyMsg() +{ + //no implementation required +} + +// ----------------------------------------------------------------------------- +void CTsModelItemKeyMsg::ConstructL(RReadStream &stream) +{ + stream >> (*this); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsrunningappmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsrunningappmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,163 @@ +/* +* 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 "tsrunningappmodel.h" + +#include +#include +#include + +#include "tsdatalist.h" +#include "tsmodelobserver.h" +#include "tsscreenshotprovider.h" + +CTsRunningAppModel *CTsRunningAppModel::NewL(MTsResourceManager &resources, MTsWindowGroupsMonitor &monitor) +{ + CTsRunningAppModel *self = CTsRunningAppModel::NewLC(resources, monitor); + CleanupStack::Pop(self); + return self; +} + +CTsRunningAppModel *CTsRunningAppModel::NewLC(MTsResourceManager &resources, MTsWindowGroupsMonitor &monitor) +{ + CTsRunningAppModel *self = new (ELeave) CTsRunningAppModel(resources); + CleanupStack::PushL(self); + self->ConstructL(resources, monitor); + return self; +} + +CTsRunningAppModel::~CTsRunningAppModel() +{ + delete mDataList; + delete mScreenshotProvider; +} + +CTsRunningAppModel::CTsRunningAppModel(MTsResourceManager &resources) : mResources(resources) +{ +} + +void CTsRunningAppModel::ConstructL(MTsResourceManager &resources, MTsWindowGroupsMonitor &monitor) +{ + mDataList = CTsDataList::NewL(resources, monitor, *this); + mScreenshotProvider = CTsScreenshotProvider::NewL(*mDataList); + + RArray wgList; + CleanupClosePushL(wgList); + User::LeaveIfError(resources.WsSession().WindowGroupList(0, &wgList)); + mDataList->HandleWindowGroupChanged(resources, wgList.Array()); + CleanupStack::PopAndDestroy(&wgList); +} + +// -------------------------------------------------------------------------- +// MHsDataObserver interface implementation +// -------------------------------------------------------------------------- +// +void CTsRunningAppModel::DataChanged() +{ + if (mObserver) { + mObserver->dataChanged(*this); + } +} + +// -------------------------------------------------------------------------- +// MTsTaskSettings interface implementation +// -------------------------------------------------------------------------- +// +TBool CTsRunningAppModel::isSupported(TInt function) const +{ + return mDataList->isSupported(function); +} + +void CTsRunningAppModel::handleDataL(TInt function,RReadStream& dataStream) +{ + mDataList->handleDataL(function, dataStream); +} + +// -------------------------------------------------------------------------- +// MTsModel interface implementation +// -------------------------------------------------------------------------- +// +TInt CTsRunningAppModel::count() const +{ + return mDataList->Data().Count(); +} + +void CTsRunningAppModel::setObserver(MTsModelObserver *observer) +{ + mObserver = observer; +} + +const TDesC& CTsRunningAppModel::displayNameL(TInt offset) const +{ + return mDataList->Data()[offset]->AppName(); +} + +TInt CTsRunningAppModel::iconHandleL(TInt offset) const +{ + CFbsBitmap *bitmap = mDataList->Data()[offset]->Screenshot(); + if (!bitmap) { + bitmap = mDataList->Data()[offset]->AppIconBitmap(); + } + + if (bitmap) { + return bitmap->Handle(); + } else { + return KErrNotFound; + } +} + +TTime CTsRunningAppModel::timestampL(TInt offset) const +{ + return mDataList->Data()[offset]->Timestamp(); +} + +TTsModelItemKey CTsRunningAppModel::keyL(TInt offset) const +{ + return TTsModelItemKey(mDataList->Data()[offset]->Key().WindowGroupId(), + reinterpret_cast(this)); +} + +TBool CTsRunningAppModel::isActiveL(TInt /*offset*/) const +{ + return ETrue; +} + +TBool CTsRunningAppModel::isClosableL(TInt offset) const +{ + return mDataList->Data()[offset]->CloseableApp(); +} + +TBool CTsRunningAppModel::closeL(TTsModelItemKey key) const +{ + TApaTask task(mResources.WsSession()); + task.SetWgId(key.key()); + task.EndTask(); + return ETrue; +} + +TBool CTsRunningAppModel::launchL(TTsModelItemKey key) const +{ + // find uid by wgid from key + CApaWindowGroupName *windowGroupName = + CApaWindowGroupName::NewLC(mResources.WsSession(), key.key()); + TUid uid = windowGroupName->AppUid(); + CleanupStack::PopAndDestroy(windowGroupName); + + TApaTask task = TApaTaskList(mResources.WsSession()).FindApp(uid); + task.BringToForeground(); + return task.Exists(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsscreenshotprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsscreenshotprovider.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,90 @@ +/* +* 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 + +#include "tsscreenshotprovider.h" +#include "tstaskmonitorglobals.h" +#include "tsscreenshotmsg.h" + + +const TUid KPluginUID = {0x200267AE}; +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CTsScreenshotProvider* CTsScreenshotProvider::NewL(MTsDataStorage& storage) +{ + CTsScreenshotProvider *self = new (ELeave)CTsScreenshotProvider(storage); + CleanupStack::PushL(self); + self->BaseConstructL(KPluginUID, KNullDesC8); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CTsScreenshotProvider::CTsScreenshotProvider(MTsDataStorage& storage) +: +mStorage(storage) +{} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotProvider::HandleMessage(const TDesC8& msg) +{ + TRAP_IGNORE(HandleMessageL(msg)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotProvider::HandleMessageL(const TDesC8& msg) +{ + RDesReadStream msgStream(msg); + CleanupClosePushL(msgStream); + if(RegisterScreenshotMessage != msgStream.ReadInt32L()) { + User::Leave(KErrNotSupported); + } + + //parse msg to ACK provider ASAP and be sure that bitmap still exists + CTsScreenshotMsg* screenshotMsg = CTsScreenshotMsg::NewLC(msgStream); + SendMessage(msg); + + //reset stream + msgStream.Close(); + msgStream.Open(msg); + + //forward stream to storage + mStorage.handleDataL(msgStream.ReadInt32L(), msgStream); + + CleanupStack::PopAndDestroy(screenshotMsg);// + CleanupStack::PopAndDestroy(&msgStream); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CTsScreenshotProvider::OnReplace() +{ + //no implementation required +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsserializeddataprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsserializeddataprovider.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,127 @@ +/* +* 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 +#include "tsserializeddataprovider.h" +#include "tsmodel.h" +// ----------------------------------------------------------------------------- +/** + * Leaving constructor. + * @param observer - data observer + */ +CTsSerializedDataProvider* CTsSerializedDataProvider::NewL(MTsDataObserver &observer) +{ + return new (ELeave) CTsSerializedDataProvider(observer); + +} + +// ----------------------------------------------------------------------------- +/** + * Constructor + * @param observer - data observer + */ +CTsSerializedDataProvider::CTsSerializedDataProvider(MTsDataObserver& observer) +: + mObserver(observer) +{} + +// ----------------------------------------------------------------------------- +/** + * Destructor + */ +CTsSerializedDataProvider::~CTsSerializedDataProvider() +{ + mData.Close(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation. + * @see MTsDataProvider::Data() + */ +const TDesC8& CTsSerializedDataProvider::Data() const +{ + return mData; +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation. + * @see MTsModelObserver::dataChanged(MTsModel &) + */ +void CTsSerializedDataProvider::dataChanged(MTsModel &model) +{ + serializeModel(model); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation. + * @see MTsModelObserver::dataChanged(TTsModelItem &) + */ +void CTsSerializedDataProvider::dataChanged(const TTsModelItem &/*item*/) +{ + //No implementation required now. +} + +// ----------------------------------------------------------------------------- +/** + * Serialize source model into internal data storage + * @param src - model + */ +void CTsSerializedDataProvider::serializeModel(const MTsModel &src) +{ + TRAPD(errNo, serializeModelL(src)); + if(KErrNone == errNo ) { + mObserver.DataChanged(); + } +} + +// ----------------------------------------------------------------------------- +/** + * Serialize source model into internal data storage. Function can leave. + * @param src - source model + */ +void CTsSerializedDataProvider::serializeModelL(const MTsModel &src) +{ + const TInt KExpandSize = 256; + CBufFlat* buf = CBufFlat::NewL(KExpandSize); + CleanupStack::PushL(buf); + RBufWriteStream stream(*buf); + CleanupClosePushL(stream); + + serializeModelL(stream, src); + + CleanupStack::PopAndDestroy(&stream); + mData.Close(); + mData.CreateL(buf->Size()); + buf->Read(0, mData, buf->Size()); + CleanupStack::PopAndDestroy(buf); +} + +// ----------------------------------------------------------------------------- +/** + * Serialize source model into destination stream. Function can leave. + * @param dst - destination stream + * @param src - source model + */ +void CTsSerializedDataProvider::serializeModelL(RWriteStream& dst, const MTsModel &src) +{ + dst.WriteInt32L(src.count()); + for (TInt iter(0); iter < src.count(); ++iter) { + dst << src.itemL(iter); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsservice.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,175 @@ +/* +* 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 +#include +#include + +#include + +#include "tsservice.h" +#include "tsmodelobserver.h" +#include "tsserviceobserver.h" + +// ----------------------------------------------------------------------------- +LOCAL_C QVariantHash valueL(QObject *model, TInt offset) +{ + QList items; + QMetaObject::invokeMethod(model, "taskList", Q_RETURN_ARG(QList, items)); + + if (offset >= items.count()) { + User::Leave(KErrCorrupt); + } + + return items.at(offset); +} + +// ----------------------------------------------------------------------------- +CTsService* CTsService::NewLC(QObject* model) +{ + CTsService *self = new (ELeave)CTsService(); + CleanupStack::PushL(self); + self->ConstructL(model); + return self; +} + +// ----------------------------------------------------------------------------- +CTsService::CTsService() +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +void CTsService::ConstructL(QObject* model) +{ + mModel = model; + User::LeaveIfNull(mModel); + // @todo: add checking for all necessary methods + + mServiceObserver = new TsServiceObserver(*this); + User::LeaveIfNull(mServiceObserver); + QObject::connect(mModel, + SIGNAL(dataChanged()), + mServiceObserver, + SLOT(dataChanged())); +} + +// ----------------------------------------------------------------------------- +CTsService::~CTsService() +{ + delete mModel; + delete mServiceObserver; + delete mBuffer; +} + +// ----------------------------------------------------------------------------- +void CTsService::DataChanged() +{ + if (0 != mModelObserver) { + mModelObserver->dataChanged(*this); + } +} +// ----------------------------------------------------------------------------- +TInt CTsService::count() const +{ + QList items; + QMetaObject::invokeMethod(mModel, "taskList", Q_RETURN_ARG(QList, items)); + return items.count(); +} + +// ----------------------------------------------------------------------------- +void CTsService::setObserver(MTsModelObserver *observer) +{ + mModelObserver = observer; +} + +// ----------------------------------------------------------------------------- +const TDesC& CTsService::displayNameL(TInt offset) const +{ + return stringValueL(offset, "TaskName"); +} + +// ----------------------------------------------------------------------------- +TInt CTsService::iconHandleL(TInt offset) const +{ + return intValueL(offset, "TaskScreenshot"); +} + +// ----------------------------------------------------------------------------- +TTime CTsService::timestampL(TInt offset) const +{ + return timeValueL(offset, "TaskTimestamp"); +} + +// ----------------------------------------------------------------------------- +TTsModelItemKey CTsService::keyL(TInt offset) const +{ + return TTsModelItemKey(intValueL(offset, "TaskId"), reinterpret_cast(this)); +} + +// ----------------------------------------------------------------------------- +TBool CTsService::isActiveL(TInt offset) const +{ + return intValueL(offset, "TaskIsRunning"); +} + +// ----------------------------------------------------------------------------- +TBool CTsService::isClosableL(TInt offset) const +{ + return intValueL(offset, "TaskCanBeClosed"); +} + +// ----------------------------------------------------------------------------- +TBool CTsService::closeL(TTsModelItemKey key) const +{ + bool result(false); + QMetaObject::invokeMethod(mModel, "closeTask", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, key.key())); + return result; +} + +// ----------------------------------------------------------------------------- +TBool CTsService::launchL(TTsModelItemKey key) const +{ + bool result(false); + QMetaObject::invokeMethod(mModel, "openTask", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, key.key())); + return result; +} + +// ----------------------------------------------------------------------------- +TInt CTsService::intValueL(TInt offset, const char *key) const +{ + return valueL(mModel, offset).value(key).toInt(); +} + +// ----------------------------------------------------------------------------- +TTime CTsService::timeValueL(TInt offset, const char *key) const +{ + // Conversion between TTime which counts from year 0, and QDateTime which uses unix epoch (1st Jan 1970) + return TTime(_L("19700000:")) + TTimeIntervalSeconds(valueL(mModel, offset).value(key).toDateTime().toTime_t()); +} + +// ----------------------------------------------------------------------------- +const TDesC& CTsService::stringValueL(TInt offset, const char *key) const +{ + delete mBuffer; + const_cast(this)->mBuffer = 0; + + const QVariantHash item(valueL(mModel, offset)); + QT_TRYCATCH_LEAVING( + const_cast(this)->mBuffer = + XQConversions::qStringToS60Desc(item.value(key).toString())); + return *mBuffer; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsserviceobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsserviceobserver.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,28 @@ +/* +* 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 "tsserviceobserver.h" +// ----------------------------------------------------------------------------- +TsServiceObserver::TsServiceObserver(MTsDataObserver& observer) +: + mObserver(observer) +{} + +// ----------------------------------------------------------------------------- +void TsServiceObserver::dataChanged() +{ + mObserver.DataChanged(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsservicesprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsservicesprovider.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* 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 "tsservicesprovider.h" +#include "tsservice.h" +// ----------------------------------------------------------------------------- +CTsServiceProvider* CTsServiceProvider::NewL(const CTsServiceProviderConfig& config) +{ + CTsServiceProvider* self = new (ELeave)CTsServiceProvider(); + self->Construct(config); + return self; +} + +// ----------------------------------------------------------------------------- +CTsServiceProvider::CTsServiceProvider() +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +void CTsServiceProvider::Construct(const CTsServiceProviderConfig& config) +{ + CTsService* srvPtr(0); + for (TInt iter(0); iter < config.count(); ++iter) { + TRAP_IGNORE( + srvPtr = CTsService::NewLC(config.loadL(iter)); + mServices.AppendL(srvPtr); + CleanupStack::Pop(srvPtr); + ); + } +} + +// ----------------------------------------------------------------------------- +CTsServiceProvider::~CTsServiceProvider() +{ + mServices.ResetAndDestroy(); +} + +// ----------------------------------------------------------------------------- +MTsModel& CTsServiceProvider::operator[](TInt offset) const +{ + return *(mServices[offset]); +} + +// ----------------------------------------------------------------------------- +TInt CTsServiceProvider::count() const +{ + return mServices.Count(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsservicesproviderconfig.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsservicesproviderconfig.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,82 @@ +/* +* 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 +#include +#include "tsservicesproviderconfig.h" + +const char ServicesInterface [] = "com.nokia.qt.taskswitcher.dataprovider"; +// ----------------------------------------------------------------------------- +CTsServiceProviderConfig* CTsServiceProviderConfig::NewLC() +{ + CTsServiceProviderConfig *self = new (ELeave)CTsServiceProviderConfig(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +CTsServiceProviderConfig::CTsServiceProviderConfig() +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +void CTsServiceProviderConfig::ConstructL() +{ + QTM_NAMESPACE::QServiceInterfaceDescriptor *ptr(0); + //QT_TRYCATCH_LEAVING( + QTM_NAMESPACE::QServiceManager serviceManager; + const QList serivces(serviceManager.findInterfaces(QTM_NAMESPACE::QServiceFilter(ServicesInterface))); + foreach(QTM_NAMESPACE::QServiceInterfaceDescriptor serviceImplementation, serivces) { + ptr = new QTM_NAMESPACE::QServiceInterfaceDescriptor(serviceImplementation); + if(0 != ptr) { + if(KErrNone != mServices.Append(ptr)) { + delete ptr; + } + } + } + //) +} + +// ----------------------------------------------------------------------------- +CTsServiceProviderConfig::~CTsServiceProviderConfig() +{ + for(TInt iter(0); iter < mServices.Count(); ++iter){ + delete static_cast(mServices[iter]); + } + mServices.Close(); +} + +// ----------------------------------------------------------------------------- +TInt CTsServiceProviderConfig::count() const +{ + return mServices.Count(); +} + +// ----------------------------------------------------------------------------- +QObject* CTsServiceProviderConfig::loadL(TInt offset)const +{ + const QTM_NAMESPACE::QServiceInterfaceDescriptor *service + = static_cast(mServices[offset]); + QObject *retVal(0); + QT_TRYCATCH_LEAVING( + QTM_NAMESPACE::QServiceManager serviceManager; + retVal = serviceManager.loadInterface(*service); + ); + User::LeaveIfNull(retVal); + return retVal; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/src/tsstorage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/src/tsstorage.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,285 @@ +/* +* 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 +#include "tsstorage.h" +#include "tsmodelitemkeymsg.h" +// ----------------------------------------------------------------------------- +/** + * Two phase construction. Create and initialize storage instance. + * @param dataProviders - list of data providers + * @return storage instane + */ +CTsStorage* CTsStorage::NewL(const TArray &dataProviders) +{ + CTsStorage* self = new(ELeave) CTsStorage(); + CleanupStack::PushL(self); + self->ConstructL(dataProviders); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +/** + * Destructor. Function cancel subscribtion for data change notyfications + */ +CTsStorage::~CTsStorage() +{ + for (TInt iter(0); iter < mDataProviders.Count(); ++iter) { + mDataProviders[iter]->setObserver(0); + } + mData.Close(); +} + +// ----------------------------------------------------------------------------- +/** + * First phase construction. + */ +CTsStorage::CTsStorage() +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +/** + * Second phase construction. Function make subscribtion for data changes notifications + * @param dataProviders - list of data providers + */ +void CTsStorage::ConstructL(const TArray &dataProviders) +{ + for (TInt iter(0); iter < dataProviders.Count(); ++iter) { + mDataProviders.AppendL(dataProviders[iter]); + dataProviders[iter]->setObserver(this); + } +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsDataObserver::DataChanged() + */ +void CTsStorage::DataChanged() +{ + resetModel(); +} + +// ----------------------------------------------------------------------------- +TBool CTsStorage::isSupported(TInt function) const +{ + return (OpenTaskMessage == function || CloseTaskMessage == function); +} +// ----------------------------------------------------------------------------- +void CTsStorage::handleDataL(TInt function, RReadStream& dataStream) +{ + if(!isSupported(function)) { + User::Leave(KErrCorrupt); + } + CTsModelItemKeyMsg* msg = CTsModelItemKeyMsg::NewLC(dataStream); + OpenTaskMessage == function ? launchL(msg->key()) : closeL(msg->key()); + CleanupStack::PopAndDestroy(msg); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModelObserver::dataChanged(MTsModel &) + */ +void CTsStorage::dataChanged(MTsModel &/*model*/) +{ + resetModel(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModelObserver::dataChanged(const TTsModelItem &) + */ +void CTsStorage::dataChanged(const TTsModelItem &/*item*/) +{ + resetModel(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::count() + */ +TInt CTsStorage::count() const +{ + return mData.Count(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::setObserver(MTsModelObserver *) + */ +void CTsStorage::setObserver(MTsModelObserver *observer) +{ + mDataObserver = observer; +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::displayNameL(TInt) + */ +const TDesC& CTsStorage::displayNameL(TInt offset) const +{ + return mData[offset].displayNameL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::iconHandleL(TInt) + */ +TInt CTsStorage::iconHandleL(TInt offset) const +{ + return mData[offset].iconHandleL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::timestampL(TInt) + */ +TTime CTsStorage::timestampL(TInt offset) const +{ + return mData[offset].timestampL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::keyL(TInt) + */ +TTsModelItemKey CTsStorage::keyL(TInt offset) const +{ + return mData[offset].keyL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::isActiveL(TInt) + */ +TBool CTsStorage::isActiveL(TInt offset) const +{ + return mData[offset].isActiveL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::isClosableL(TInt) + */ +TBool CTsStorage::isClosableL(TInt offset) const +{ + return mData[offset].isClosableL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::closeL(TTsModelItemKey) + */ +TBool CTsStorage::closeL(TTsModelItemKey key) const +{ + return findL(key).closeL(); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MTsModel::launchL(TTsModelItemKey) + */ +TBool CTsStorage::launchL(TTsModelItemKey key) const +{ + return findL(key).launchL(); +} + + +// ----------------------------------------------------------------------------- +TTsModelItem CTsStorage::findL(TTsModelItemKey key) const +{ + for(TInt offset(0); offset < mData.Count(); ++offset) { + if(mData[offset].keyL() == key){ + return mData[offset]; + } + } + User::Leave(KErrNotFound); + return itemL(0);//just avoid compilation warnings +} + +// ----------------------------------------------------------------------------- +/** + * Retrieve shallow copy of data from known data providers and sort entries + */ +TInt CTsStorage::resetModel() +{ + TRAPD(errNo, resetModelL()); + return errNo; +} + +// ----------------------------------------------------------------------------- +/** + * Retrieve shallow copy of data from known data providers and sort entries + */ +void CTsStorage::resetModelL() +{ + mData.Reset(); + for (TInt iter(0); iter < mDataProviders.Count(); ++iter) { + pullDataL(*(mDataProviders[iter])); + } + reorderDataL(); + if (0 != mDataObserver) { + mDataObserver->dataChanged(*this); + } +} + +// ----------------------------------------------------------------------------- +/** + * Retrieve shallow copy of data from source model + * @param src - source model + */ +void CTsStorage::pullDataL(const MTsModel& src) +{ + for (TInt iter(0); iter < src.count(); ++iter) { + mData.AppendL(src.itemL(iter)); + } +} + +// ----------------------------------------------------------------------------- +/** + * Sort internal data model + */ +void CTsStorage::reorderDataL() +{ + for (TInt prev(0); prev < mData.Count(); ++prev) { + for(TInt next(prev + 1); next < mData.Count(); ++next) { + const TTsModelItem prevItem(mData[prev]), nextItem(mData[next]); + if(prevItem.timestampL() < nextItem.timestampL()) { + mData.Remove(prev); + mData.InsertL(nextItem, prev); + + mData.Remove(next); + mData.InsertL(prevItem, next); + } + } + } +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,89 @@ +/* +* 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_tsmodel.h" + +_LIT(KDisplayName, "TestName" ); + +TBool T_TsModel::expectedBoolValue() +{ + return ETrue; +} + +const TDesC& T_TsModel::expectedDesCValue() +{ + return KDisplayName(); +} + +TInt T_TsModel::expectedIntValue() +{ + return 0; +} + +TInt T_TsModel::count() const +{ + return 1; +} + +TTime T_TsModel::expectedTimeValue() +{ + return TTime(0); +} + + +void T_TsModel::setObserver(MTsModelObserver */*observer*/) +{ +} + +const TDesC& T_TsModel::displayNameL(TInt /*offset*/) const +{ + return T_TsModel::expectedDesCValue(); +} + +TInt T_TsModel::iconHandleL(TInt /*offset*/) const +{ + return T_TsModel::expectedIntValue(); +} + +TTime T_TsModel::timestampL(TInt /*offset*/) const +{ + return T_TsModel::expectedTimeValue(); +} + +TTsModelItemKey T_TsModel::keyL(TInt /*offset*/) const +{ + return TTsModelItemKey(T_TsModel::expectedIntValue(), reinterpret_cast(this)); +} + +TBool T_TsModel::isActiveL(TInt /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} + +TBool T_TsModel::isClosableL(TInt /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} + +TBool T_TsModel::closeL(TTsModelItemKey /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} + +TBool T_TsModel::launchL(TTsModelItemKey /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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 "tsmodel.h" +class T_TsModel: public MTsModel +{ +public: + static TBool expectedBoolValue(); + static const TDesC& expectedDesCValue(); + static TInt expectedIntValue(); + static TTime expectedTimeValue(); + + TInt count() const; + void setObserver(MTsModelObserver *observer); + +protected: + const TDesC& displayNameL(TInt offset) const; + TInt iconHandleL(TInt offset) const; + TTime timestampL(TInt offset) const; + TTsModelItemKey keyL(TInt offset) const; + TBool isActiveL(TInt offset) const; + TBool isClosableL(TInt offset) const; + TBool closeL(TTsModelItemKey key) const; + TBool launchL(TTsModelItemKey key) const; + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodelitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodelitem.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,80 @@ +/* +* 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 + +#include "t_tsmodelitem.h" +#include "t_tsmodel.h" + +void T_TsModelItem::testItem() +{ + T_TsModel model; + int errNo(KErrNone); + const int invalidOffset(model.count()); + const int validOffset(model.count() - 1); + QVERIFY(0 <= validOffset); + + TRAP(errNo, model.itemL(invalidOffset).displayNameL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).displayNameL()); + QVERIFY(KErrNone == errNo); + QVERIFY(0 == T_TsModel::expectedDesCValue().Compare(model.itemL(validOffset).displayNameL())); + + TRAP(errNo, model.itemL(invalidOffset).iconHandleL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).iconHandleL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedIntValue() == model.itemL(validOffset).iconHandleL()); + + TRAP(errNo, model.itemL(invalidOffset).timestampL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).timestampL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedTimeValue() == model.itemL(validOffset).timestampL()); + + TRAP(errNo, model.itemL(invalidOffset).keyL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).keyL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedIntValue() == model.itemL(validOffset).keyL().key()); + + TRAP(errNo, model.itemL(invalidOffset).isActiveL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).isActiveL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedBoolValue() == model.itemL(validOffset).isActiveL()); + + TRAP(errNo, model.itemL(invalidOffset).isClosableL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).isClosableL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedBoolValue() == model.itemL(validOffset).isClosableL()); + + TRAP(errNo, model.itemL(invalidOffset).closeL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).closeL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedBoolValue() == model.itemL(validOffset).closeL()); + + TRAP(errNo, model.itemL(invalidOffset).launchL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(validOffset).launchL()); + QVERIFY(KErrNone == errNo); + QVERIFY(T_TsModel::expectedBoolValue() == model.itemL(validOffset).launchL()); + +} + +QTEST_MAIN(T_TsModelItem) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodelitem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodelitem.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,27 @@ +/* +* 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 + +class T_TsModelItem : public QObject +{ + Q_OBJECT + +private slots: + void testItem(); + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodelitem.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsmodelitem/t_tsmodelitem.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +# +# 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: +# + +CONFIG += qtestlib console + + +SOURCES += t_tsmodelitem.cpp \ + t_tsmodel.cpp + +HEADERS += t_tsmodelitem.h \ + t_tsmodel.h + + +SOURCES += ../../src/tsmodelitemkey.cpp \ + ../../src/tsmodelitem.cpp \ + ../../src/tsmodel.cpp + +HEADERS += ../../inc/tsmodelitemkey.h \ + ../../inc/tsmodelitem.h \ + ../../inc/tsmodel.h + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.CAPABILITY = ALL -TCB + + LIBS += -lestor \ # for RWriteStream + +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,94 @@ +/* +* 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_tsmodel.h" + +_LIT(KDisplayName, "TestName" ); + +TBool T_TsModel::expectedBoolValue() +{ + return ETrue; +} + +const TDesC& T_TsModel::expectedDesCValue() +{ + return KDisplayName(); +} + +TInt T_TsModel::expectedIntValue() +{ + return 0; +} + +T_TsModel::T_TsModel(int itemsCount) +: +mItemsCount(itemsCount) +{} + +TInt T_TsModel::count() const +{ + return mItemsCount; +} + +TTime T_TsModel::expectedTimeValue() +{ + return TTime(0); +} + + +void T_TsModel::setObserver(MTsModelObserver */*observer*/) +{ +} + +const TDesC& T_TsModel::displayNameL(TInt /*offset*/) const +{ + return T_TsModel::expectedDesCValue(); +} + +TInt T_TsModel::iconHandleL(TInt /*offset*/) const +{ + return T_TsModel::expectedIntValue(); +} + +TTime T_TsModel::timestampL(TInt /*offset*/) const +{ + return T_TsModel::expectedTimeValue(); +} + +TTsModelItemKey T_TsModel::keyL(TInt /*offset*/) const +{ + return TTsModelItemKey(T_TsModel::expectedIntValue(), reinterpret_cast(this)); +} + +TBool T_TsModel::isActiveL(TInt /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} + +TBool T_TsModel::isClosableL(TInt /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} + +TBool T_TsModel::closeL(TTsModelItemKey /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} + +TBool T_TsModel::launchL(TTsModelItemKey /*offset*/) const +{ + return T_TsModel::expectedBoolValue(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +/* +* 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 "tsmodel.h" +class T_TsModel: public MTsModel +{ +public: + static TBool expectedBoolValue(); + static const TDesC& expectedDesCValue(); + static TInt expectedIntValue(); + static TTime expectedTimeValue(); + + TInt count() const; + void setObserver(MTsModelObserver *observer); + T_TsModel(int itemsCount =0); +protected: + const TDesC& displayNameL(TInt offset) const; + TInt iconHandleL(TInt offset) const; + TTime timestampL(TInt offset) const; + TTsModelItemKey keyL(TInt offset) const; + TBool isActiveL(TInt offset) const; + TBool isClosableL(TInt offset) const; + TBool closeL(TTsModelItemKey key) const; + TBool launchL(TTsModelItemKey key) const; + +private: + int mItemsCount; + +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsserializeddataprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsserializeddataprovider.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ +/* +* 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 +#include "tsserializeddataprovider.h" +#include "t_tsmodel.h" +#include "t_tsserializeddataprovider.h" + +void T_TsSerializedDataProvider::testModelDataChanged() +{ + CTsSerializedDataProvider* provider(0); + + mNotifications = 0; + provider = CTsSerializedDataProvider::NewL(*this); + T_TsModel emptyModel(0); + QVERIFY(0 == provider->Data().Length()); + provider->dataChanged(emptyModel); + QVERIFY(1 == mNotifications); + QVERIFY(0 < provider->Data().Length()); + delete provider; + + mNotifications = 0; + provider = CTsSerializedDataProvider::NewL(*this); + T_TsModel model(2); + QVERIFY(0 == provider->Data().Length()); + provider->dataChanged(model); + QVERIFY(1 == mNotifications); + QVERIFY(0 < provider->Data().Length()); + delete provider; +} + +void T_TsSerializedDataProvider::testItemDataChanged() +{ + CTsSerializedDataProvider* provider(0); + + mNotifications = 0; + provider = CTsSerializedDataProvider::NewL(*this); + T_TsModel model(1); + QVERIFY(0 == provider->Data().Length()); + provider->dataChanged(model.itemL(0)); + QVERIFY(0 == mNotifications); + QVERIFY(0 == provider->Data().Length()); + delete provider; +} + +void T_TsSerializedDataProvider::DataChanged() +{ + ++mNotifications; +} + +QTEST_MAIN(T_TsSerializedDataProvider) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsserializeddataprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsserializeddataprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,31 @@ +/* +* 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 +#include "tsdataobserver.h" +class T_TsSerializedDataProvider : public QObject, + public MTsDataObserver +{ + Q_OBJECT + + void DataChanged(); +private slots: + void testModelDataChanged(); + void testItemDataChanged(); +private: + int mNotifications; +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsserializeddataprovider.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsserializeddataprovider/t_tsserializeddataprovider.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +# +# 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: +# + +CONFIG += qtestlib console + + +SOURCES += t_tsserializeddataprovider.cpp \ + t_tsmodel.cpp + +HEADERS += t_tsserializeddataprovider.h \ + t_tsmodel.h + + +SOURCES += ../../src/tsmodelitemkey.cpp \ + ../../src/tsmodelitem.cpp \ + ../../src/tsmodel.cpp \ + ../../src/tsserializeddataprovider.cpp + +HEADERS += ../../inc/tsmodelitemkey.h \ + ../../inc/tsmodelitem.h \ + ../../inc/tsmodel.h \ + ../../inc/tsserializeddataprovider.h \ + ../../../utils/inc/tsdataobserver.h + +symbian { +LIBS += -lestor +CONFIG += symbian_test +coverage: CONFIG -= symbian_test +TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,170 @@ +/* +* 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 +#include "t_tsservicesprovider.h" +#include "tsservicesproviderconfig.h" +#include "tsservice.h" +#include "tsservicesprovider.h" +#include "tsserviceobserver.h" + + +class QtModel: public QObject +{ + QList taskList() const + { + return QList(); + } + + QList taskList(int limit) const + { + Q_UNUSED(limit); + return QList(); + } + + bool openTask(const QVariant &/*id*/){return true;}; + bool closeTask(const QVariant &/*id*/){return true;}; +}; + +void T_TsServiceProvider::testProvider() +{ + CTsServiceProvider *provider(0); + CTsServiceProviderConfig* config(0); + //test provider with different amount of data + int errNo; + const int maxDataCount(4); + + + for(TInt dataCount(0); dataCount < maxDataCount; ++dataCount) { + config = CTsServiceProviderConfig::NewLC(dataCount); + provider = CTsServiceProvider::NewL(*config); + CleanupStack::PopAndDestroy(config); + QVERIFY(dataCount == provider->count()); + for(TInt dataProviderIter(0); dataProviderIter < provider->count(); ++dataProviderIter) { + MTsModel& model((*provider)[dataProviderIter]); + + //we dont verify data. just try to retrieve it. model can leave but shouldn't panic + for (TInt dataIter(0); dataIter < model.count(); ++dataIter) { + TRAP_IGNORE(model.itemL(dataIter).keyL()); + TRAP_IGNORE(model.itemL(dataIter).displayNameL()); + TRAP_IGNORE(model.itemL(dataIter).iconHandleL()); + TRAP_IGNORE(model.itemL(dataIter).isActiveL()); + TRAP_IGNORE(model.itemL(dataIter).isClosableL()); + TRAP_IGNORE(model.itemL(dataIter).timestampL()); + TRAP_IGNORE(model.itemL(dataIter).launchL()); + TRAP_IGNORE(model.itemL(dataIter).closeL()); + } + TRAP(errNo, model.itemL(model.count()).keyL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).displayNameL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).iconHandleL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).isActiveL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).isClosableL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).timestampL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).launchL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count()).closeL()); + QVERIFY(KErrNone != errNo); + + TRAP(errNo, model.itemL(model.count() + 1).keyL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).displayNameL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).iconHandleL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).isActiveL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).isClosableL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).timestampL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).launchL()); + QVERIFY(KErrNone != errNo); + TRAP(errNo, model.itemL(model.count() + 1).closeL()); + QVERIFY(KErrNone != errNo); + } + delete provider; + } +} + +void T_TsServiceProvider::testService() +{ + int errNo, maxNotifications(20); + CTsService* service; + mNotyfications = 0; + + TRAP(errNo, service = CTsService::NewLC(0)); + QVERIFY(KErrNone != errNo); + + TRAP(errNo, + service = CTsService::NewLC(new QtModel()); + service->setObserver(0); + service->DataChanged(); + if(0 != mNotyfications){ + User::Leave(KErrCorrupt); + } + service->setObserver(this); + for(int iter(0); iter < maxNotifications; ++iter) { + service->DataChanged(); + if(iter + 1 != mNotyfications){ + User::Leave(KErrCorrupt); + } + } + CleanupStack::PopAndDestroy(service); + );//TRAP + QVERIFY(KErrNone == errNo); +} + +void T_TsServiceProvider::testServiceObserver() +{ + TsServiceObserver observer(*this); + QObject::connect(this, + SIGNAL(someSignal()), + &observer, + SLOT(dataChanged())); + QTimer::singleShot(5000, &mLoop, SLOT(quit())); + mNotyfications = 0; + emit someSignal(); + if(0 == mNotyfications && !mLoop.isRunning()) { + mLoop.exec(); + } + QVERIFY(1 == mNotyfications); +} + +void T_TsServiceProvider::dataChanged(MTsModel &/*model*/) +{ + ++mNotyfications; +} + +void T_TsServiceProvider::dataChanged(const TTsModelItem &/*item*/) +{ +} + +void T_TsServiceProvider::DataChanged() +{ + ++mNotyfications; + if(mLoop.isRunning()) { + mLoop.quit(); + } +} + +QTEST_MAIN(T_TsServiceProvider) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef T_TSSERVICESPROVIDER_H +#define T_TSSERVICESPROVIDER_H + +#include +#include +#include +#include "tsdataobserver.h" +class CTsServiceProviderConfig; +class T_TsServiceProvider : public QObject, + public MTsModelObserver, + public MTsDataObserver +{ + Q_OBJECT +public: + void dataChanged(MTsModel &model); + void dataChanged(const TTsModelItem &item); + void DataChanged(); + +private slots: + void testProvider(); + void testService(); + void testServiceObserver(); + +signals: + void someSignal(); +private: + int mNotyfications; + QEventLoop mLoop; +}; +#endif //T_TSSERVICESPROVIDER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +# +# 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: +# + +CONFIG += qtestlib console mobility +MOBILITY = serviceframework + +SOURCES += t_tsservicesprovider.cpp \ + tstestmodel.cpp \ + tsservicesproviderconfig.cpp \ + + +HEADERS += t_tsservicesprovider.h \ + tstestmodel.h \ + tsservicesproviderconfig.h + + +SOURCES += ../../src/tsservicesprovider.cpp \ + ../../src/tsservice.cpp \ + ../../src/tsmodelitemkey.cpp \ + ../../src/tsmodelitem.cpp \ + ../../src/tsmodel.cpp \ + ../../src/tsserviceobserver.cpp + +HEADERS += ../../inc/tsservicesprovider.h \ + ../../inc/tsservice.h \ + ../../inc/tsmodelitemkey.h \ + ../../inc/tsmodelitem.h \ + ../../inc/tsserviceobserver.h \ + +INCLUDEPATH += ../../../utils/inc + + +LIBS += -lxqutils \ + -lestor + +symbian { +CONFIG += symbian_test +coverage: CONFIG -= symbian_test +TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/tsservicesproviderconfig.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/tsservicesproviderconfig.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +/* +* 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 "tsservicesproviderconfig.h" +#include "tstestmodel.h" +// ----------------------------------------------------------------------------- +CTsServiceProviderConfig* CTsServiceProviderConfig::NewLC(TInt count) +{ + CTsServiceProviderConfig *self = new (ELeave)CTsServiceProviderConfig(count); + CleanupStack::PushL(self); + return self; +} + +// ----------------------------------------------------------------------------- +CTsServiceProviderConfig::CTsServiceProviderConfig(TInt count) +: + mCount(count) +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +CTsServiceProviderConfig::~CTsServiceProviderConfig() +{ +} + +// ----------------------------------------------------------------------------- +TInt CTsServiceProviderConfig::count() const +{ + return mCount; +} + +// ----------------------------------------------------------------------------- +QObject* CTsServiceProviderConfig::loadL(TInt /*offset*/)const +{ + return new TsTestModel(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/tsservicesproviderconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/tsservicesproviderconfig.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ +#ifndef TSSERVICESPROVIDERCONFIG_H +#define TSSERVICESPROVIDERCONFIG_H + +#include +class QObject; +class CTsServiceProviderConfig: public CBase +{ +public: + static CTsServiceProviderConfig* NewLC(TInt count); + ~CTsServiceProviderConfig(); + + TInt count() const; + QObject* loadL(TInt offset)const; +private: + CTsServiceProviderConfig(TInt count); + +private: + const TInt mCount; +}; + +#endif //TSSERVICESPROVIDERCONFIG_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/tstestmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/tstestmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,85 @@ +/* +* 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 +#include + +#include "tstestmodel.h" + +const int dataIterations(3); + +TsTestModel::TsTestModel() +{ + mData = data(-1); +} +QList TsTestModel::taskList() const +{ + return mData; +} + +QList TsTestModel::taskList(int limit) const +{ + return data(limit); +} + +bool TsTestModel::openTask(const QVariant &/*id*/) +{ + return true; +} +bool TsTestModel::closeTask(const QVariant &/*id*/) +{ + return true; +} + +QList TsTestModel::data(int limit) const +{ + QStringList allKeys; + allKeys << "TaskId" << "TaskName" << "TaskScreenshot" << "TaskTimestamp" << "TaskIsRunning" << "TaskCanBeClosed" << "TaskUid"; + + int offset(0); + QList retVal; + for( int iter(0); iter < dataIterations; ++iter) { + + if(-1 != limit && ++offset >limit) { + break; + } + retVal.append(data()); + + foreach (const QString &key, allKeys) { + if(-1 != limit && ++offset >limit) { + break; + } + QVariantHash dataSet(data()); + dataSet.remove(key); + retVal.append(dataSet); + } + } + return retVal; +} + +QVariantHash TsTestModel::data()const +{ + QVariantHash data; + data.insert("TaskId", 0); + data.insert("TaskName", "Fake test name"); + data.insert("TaskScreenshot", 0); + data.insert("TaskTimestamp", QDateTime()); + data.insert("TaskIsRunning", 0); + data.insert("TaskCanBeClosed", 0); + data.insert("TaskUid", 0 ); + return data; +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesprovider/tstestmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesprovider/tstestmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ + +#ifndef TSTESTMODEL_H +#define TSTESTMODEL_H + +#include +#include + +class TsTestModel : public QObject +{ + Q_OBJECT +public: + TsTestModel(); +public slots: + QList taskList() const; + QList taskList(int limit) const; + + bool openTask(const QVariant &id); + bool closeTask(const QVariant &id) ; + +private: + QList data(int limit) const; + QVariantHash data()const; +private: + QList mData; + +}; +#endif // TSTESTMODEL_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ +/* +* 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 +#include +#include "t_tsservicesproviderconfig.h" +#include "tsservicesproviderconfig.h" + +const char serviceFile [] = ":/t_tsservicesproviderconfig.xml"; +const char serviceName [] = "TsTestModelPlugin"; +void T_TsServiceProviderConfig::testConfig() +{ + CTsServiceProviderConfig *cfg(0); + + //test doesnt install any plugin. number of services can be equal 0 + cfg = CTsServiceProviderConfig::NewLC(); + QVERIFY(0 <= cfg->count()); + QVERIFY(checkInterfaces(*cfg)); + CleanupStack::PopAndDestroy(cfg); + + //test install test plugin. number of services has to be bigger then 0 + QTM_NAMESPACE::QServiceManager manager; + manager.addService(serviceFile); + cfg = CTsServiceProviderConfig::NewLC(); + QVERIFY(0 < cfg->count()); + QVERIFY(checkInterfaces(*cfg)); + CleanupStack::PopAndDestroy(cfg); + manager.removeService(serviceName); +} + +bool T_TsServiceProviderConfig::checkInterfaces(const CTsServiceProviderConfig & cfg) +{ + bool retVal(true); + for(int iter(0); iter < cfg.count() && retVal; ++iter) { + QObject* ptr = cfg.loadL(iter); + retVal = (0 != ptr); + delete ptr; + } + return retVal; +} + +QTEST_MAIN(T_TsServiceProviderConfig) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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: +* +*/ +#ifndef T_TSSERVICESPROVIDERCONFIG_H +#define T_TSSERVICESPROVIDERCONFIG_H + +#include +class CTsServiceProviderConfig; +class T_TsServiceProviderConfig : public QObject +{ + Q_OBJECT +private slots: + void testConfig(); +private: + bool checkInterfaces(const CTsServiceProviderConfig &); +}; +#endif //T_TSSERVICESPROVIDERCONFIG_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +# +# 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: +# + +CONFIG += qtestlib console mobility +MOBILITY = serviceframework + +SOURCES += t_tsservicesproviderconfig.cpp + +HEADERS += t_tsservicesproviderconfig.h + + +SOURCES += ../../src/tsservicesproviderconfig.cpp + +HEADERS += ../../inc/tsservicesproviderconfig.h + +LIBS += -lxqutils + +RESOURCES += t_tsservicesproviderconfig.qrc + +symbian { +CONFIG += symbian_test +coverage: CONFIG -= symbian_test +TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsservicesproviderconfig/t_tsservicesproviderconfig.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,5 @@ + + + ../../internal/modelpluginexample/plugin/data/tstestmodelplugin.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsstorage/t_tsmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsstorage/t_tsmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,79 @@ +/* +* 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_tsmodel.h" + +_LIT(KDisplayName, "TestName" ); + +T_TsModel::T_TsModel(int items) +{ + mItemsCount = items; +} + +TInt T_TsModel::count() const +{ + return mItemsCount; +} + +void T_TsModel::setObserver(MTsModelObserver *observer) +{ + mObserver = observer; +} + +const TDesC& T_TsModel::displayNameL(TInt /*offset*/) const +{ + return KDisplayName(); +} + +TInt T_TsModel::iconHandleL(TInt /*offset*/) const +{ + return 0; +} + +TTime T_TsModel::timestampL(TInt offset) const +{ + if (0 == (offset %2)) { + offset = 0; + }else if(0 == (offset % 5)) { + offset = 1; + } + return TTime(offset); +} + +TTsModelItemKey T_TsModel::keyL(TInt offset) const +{ + return TTsModelItemKey(offset, reinterpret_cast(this)); +} + +TBool T_TsModel::isActiveL(TInt /*offset*/) const +{ + return ETrue; +} + +TBool T_TsModel::isClosableL(TInt /*offset*/) const +{ + return ETrue; +} + +TBool T_TsModel::closeL(TTsModelItemKey) const +{ + return ETrue; +} + +TBool T_TsModel::launchL(TTsModelItemKey ) const +{ + return ETrue; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsstorage/t_tsmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsstorage/t_tsmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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 "tsmodel.h" +class T_TsModel: public MTsModel +{ +public: + T_TsModel(int items); + TInt count() const; + void setObserver(MTsModelObserver *observer); + +protected: + const TDesC& displayNameL(TInt offset) const; + TInt iconHandleL(TInt offset) const; + TTime timestampL(TInt offset) const; + TTsModelItemKey keyL(TInt offset) const; + TBool isActiveL(TInt offset) const; + TBool isClosableL(TInt offset) const; + TBool closeL(TTsModelItemKey key) const; + TBool launchL(TTsModelItemKey key) const; + +private: + TInt mItemsCount; + MTsModelObserver* mObserver; +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,128 @@ +/* +* 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 +#include "tsstorage.h" +#include "t_tsstorage.h" +#include "t_tsmodel.h" + +const int KBigSet(100); + +void T_TsStorage::testItemDataChanged() +{ + CTsStorage* storage(0); + T_TsModel emptyProvider(0), + bigSetProvider(KBigSet); + RPointerArrayproviders; + CleanupClosePushL(providers); + + //storage has no data providers + mNotifications = 0; + storage = CTsStorage::NewL(providers.Array()); + storage->dataChanged(bigSetProvider.itemL(0)); + QVERIFY(0 == mNotifications);//storage has no observers + verifyProviders(*storage, providers.Array()); + storage->setObserver(this); + storage->dataChanged(bigSetProvider.itemL(0)); + QVERIFY(1 == mNotifications);//storage has observers + verifyProviders(*storage, providers.Array()); + delete storage; + + providers.Append(&emptyProvider); + providers.Append(&bigSetProvider); + + //storage has some + mNotifications = 0; + storage = CTsStorage::NewL(providers.Array()); + storage->dataChanged(bigSetProvider.itemL(0)); + QVERIFY(0 == mNotifications);//storage has no observers + verifyProviders(*storage, providers.Array()); + storage->setObserver(this); + storage->dataChanged(bigSetProvider.itemL(0)); + QVERIFY(1 == mNotifications);//storage has observers + verifyProviders(*storage, providers.Array()); + delete storage; + CleanupStack::PopAndDestroy(&providers); +} + +void T_TsStorage::testModelDataChanged() +{ + CTsStorage* storage(0); + T_TsModel emptyProvider(0), + bigSetProvider(KBigSet); + RPointerArrayproviders; + CleanupClosePushL(providers); + + //storage has no data providers + mNotifications = 0; + storage = CTsStorage::NewL(providers.Array()); + storage->dataChanged(emptyProvider); + QVERIFY(0 == mNotifications);//storage has no observers + verifyProviders(*storage, providers.Array()); + storage->setObserver(this); + storage->dataChanged(emptyProvider); + QVERIFY(1 == mNotifications);//storage has observers + verifyProviders(*storage, providers.Array()); + delete storage; + + providers.Append(&emptyProvider); + providers.Append(&bigSetProvider); + + //storage has some + mNotifications = 0; + storage = CTsStorage::NewL(providers.Array()); + storage->dataChanged(emptyProvider); + QVERIFY(0 == mNotifications);//storage has no observers + verifyProviders(*storage, providers.Array()); + storage->setObserver(this); + storage->dataChanged(emptyProvider); + QVERIFY(1 == mNotifications);//storage has observers + verifyProviders(*storage, providers.Array()); + delete storage; + CleanupStack::PopAndDestroy(&providers); +} + +void T_TsStorage::verifyProviders(const MTsModel &set, const TArray& providers) +{ + int sum(0); + for (int iter(0); iter < providers.Count(); ++iter) { + sum += (providers[iter])->count(); + QVERIFY(set.count() >= (providers[iter])->count()); + QVERIFY(EFalse != isSubset(set, *(providers[iter]))); + } + QVERIFY(set.count() == sum); +} + +TBool T_TsStorage::isSubset(const MTsModel &set, const MTsModel& subset) const +{ + bool isOk = true; + for (int i(0); i < subset.count() && isOk; ++i) { + isOk = false; + for(int k(0); k < set.count() && !isOk; ++k){ + set.itemL(k).launchL(); + set.itemL(k).closeL(); + isOk = (subset.itemL(i).keyL() == set.itemL(k).keyL()) && + (subset.itemL(i).timestampL() == set.itemL(k).timestampL()) && + (subset.itemL(i).iconHandleL() == set.itemL(k).iconHandleL()) && + (subset.itemL(i).isActiveL() == set.itemL(k).isActiveL()) && + (subset.itemL(i).isClosableL() == set.itemL(k).isClosableL()) && + (0 == subset.itemL(i).displayNameL().Compare(set.itemL(k).displayNameL())); + } + } + return isOk ? ETrue : EFalse; +} + +QTEST_MAIN(T_TsStorage) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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 + +#include "tsmodelobserver.h" + +class MTsModel; +class TTsModelItem; + +class T_TsStorage : public QObject, + public MTsModelObserver +{ + Q_OBJECT + +private slots: + void testItemDataChanged(); + void testModelDataChanged(); + +private: + void dataChanged(MTsModel &/*model*/){++mNotifications;} + void dataChanged(const TTsModelItem &/*item*/){++mNotifications;} + + void verifyProviders(const MTsModel &set, const TArray& providers); + TBool isSubset(const MTsModel &set, const MTsModel& subset) const; + +private: + int mNotifications; +}; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +# +# 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: +# + +CONFIG += qtestlib console + + +SOURCES += t_tsstorage.cpp \ + t_tsmodel.cpp + +HEADERS += t_tsstorage.h \ + t_tsmodel.h + +INCLUDEPATH += ../../../utils/inc \ + ../../../inc \ + +SOURCES += ../../src/tsmodelitemkey.cpp \ + ../../src/tsmodelitem.cpp \ + ../../src/tsmodel.cpp \ + ../../src/tsstorage.cpp \ + ../../src/tsmodelitemkeymsg.cpp + +HEADERS += ../../inc/tsmodelobserver.h \ + ../../inc/tsmodelitemkey.h \ + ../../inc/tsmodelitem.h \ + ../../inc/tsmodel.h \ + ../../inc/tsstorage.h \ + ../../inc/tsmodelitemkeymsg.h + + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.CAPABILITY = ALL -TCB + + LIBS += -lestor \ # for RWriteStream + +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/server/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/server/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,25 @@ +# +# 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: +# + +TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS += ../internal/modelpluginexample/plugin \ + t_tsmodelitem \ + t_tsstorage \ + t_tsserializeddataprovider \ + t_tsservicesproviderconfig \ + t_tsservicesprovider \ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/sis/stubs/createstubs.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/sis/stubs/createstubs.bat Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +for %%f in (*.pkg) do makesis -s %%f diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/sis/stubs/taskmonitor_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/sis/stubs/taskmonitor_stub.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +; +; 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: +; +; ------------------------------------------------------------------------------ +; Taskswitcher stub SIS package file. +; Used to enable Taskswitcher to be updated from ROM with a SIS package. +; When you add new files into this stub, please remember to update +; SIS stub with "makesis -s" command. +; ------------------------------------------------------------------------------ +; +;Language - standard language definitions +&EN + +; standard SIS file header +#{"taskmonitor"},(0x200267B0),1,0,0,TYPE=SA + +;Localized Vendor Name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + +"" - "Z:\sys\bin\tstaskmonitorclient.dll" +"" - "Z:\sys\bin\hsrunningappmonitor.exe" +"" - "Z:\sys\bin\tsscreenshotplugin.dll" +"" - "Z:\resource\plugins\tsscreenshotplugin.rsc" +"" - "Z:\sys\bin\tsbackstepping.dll" \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/sis/stubs/taskmonitor_stub.sis Binary file taskswitcher/sis/stubs/taskmonitor_stub.sis has changed diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/sis/taskmonitor.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/sis/taskmonitor.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +; +; 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: +; + +;Language - standard language definitions +&EN + +; standard SIS file header +#{"taskmonitor"},(0x200267B0),1,0,0,TYPE=SA, RU + +;Localized Vendor Name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + + +"/epoc32/release/armv5/urel/hsrunningappmonitor.exe" - "!:\sys\bin\hsrunningappmonitor.exe" +"/epoc32/release/armv5/urel/tstaskmonitorclient.dll"-"!:\sys\bin\tstaskmonitorclient.dll" +"/epoc32/release/armv5/urel/tsscreenshotplugin.dll"-"!:\sys\bin\tsscreenshotplugin.dll" +"/epoc32/data/z/resource/plugins/tsscreenshotplugin.rsc"-"!:\resource\plugins\tsscreenshotplugin.rsc" +"/epoc32/release/armv5/urel/tsbackstepping.dll"-"!:\sys\bin\tsbackstepping.dll" diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/taskswitcher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/taskswitcher.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += client +symbian { + SUBDIRS += backstepping \ + server \ + screenshotplugin + + BLD_INF_RULES.prj_exports += "inc/tstaskmonitorglobals.h |../inc/tstaskmonitorglobals.h" + +} + +symbian:include(rom.pri) \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/appiconstarter/appiconstarter.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/appiconstarter/appiconstarter.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = appiconstarter + +load(hb.prf) +CONFIG -= symbian_i18n + +SOURCES += main.cpp\ +starterwidget.cpp\ +viewmanager.cpp + + +HEADERS += starterwidget.h\ +viewmanager.h + +LIBS += -lefsrv.dll \ + -leuser.dll \ + -lbafl.dll \ + -lapgrfx.dll \ + -leikcore.dll + + +symbian { + TARGET.CAPABILITY += AllFiles + } diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/appiconstarter/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/appiconstarter/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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 +#include +#include "viewmanager.h" + +int main(int argc, char **argv) +{ + HbApplication app( argc, argv ); + + viewmanager mainWindow; + mainWindow.show(); + mainWindow.activateWindow(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/appiconstarter/starterwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/appiconstarter/starterwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,105 @@ +/* +* 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 +#include "starterwidget.h" +#include +#include +#include +#include +#include +#include +#include + + + +starterwidget::starterwidget( QGraphicsItem* parent ) + : HbWidget( parent ) + { + mStart1 = new HbPushButton( "Start Search" ); + mStart2 = new HbPushButton( "Start FileBrowser" ); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem( mStart1, 1, 0, 1, 1 ); + mGridLayout->addItem( mStart2, 2, 0, 1, 1 ); + mGridLayout->setRowStretchFactor ( 0, 1 ); + mGridLayout->setRowStretchFactor ( 1, 1 ); + mGridLayout->setRowStretchFactor ( 2, 1 ); + setLayout(mGridLayout); + + mTimer1 = new QTimer( this ); + mTimer2 = new QTimer( this ); + connect( mStart1, SIGNAL(released()), this, SLOT(startopen1() ) ); + connect( mTimer1, SIGNAL(timeout()), this, SLOT(acivate1() ) ); + connect( mStart2, SIGNAL(released()), this, SLOT(startopen2() ) ); + connect( mTimer2, SIGNAL(timeout()), this, SLOT(acivate2() ) ); + } + +starterwidget::~starterwidget() + { + + } + +void starterwidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) + { + HbWidget::paint(painter, option, widget); + + if ( mMessage.isEmpty() || mMessage == "" ) + { + return; + } + QFont font; + font.setPointSize(30); + painter->setFont(font); + painter->drawText(10, 100, mMessage ); + } + +void starterwidget::startopen1() + { + mTimer1->start( 5000 ); + } + +void starterwidget::startopen2() + { + mTimer2->start( 5000 ); + } + +void starterwidget::acivate1() + { + bool ok = QProcess::startDetached("Searchapplication"); + if ( !ok ) + { + mMessage = "Not Found 1"; + } + + update(); + mTimer1->stop(); + } + +void starterwidget::acivate2() + { + bool ok = QProcess::startDetached("FileBrowser"); + if ( !ok ) + { + mMessage = "Not Found 2"; + } + + update(); + mTimer2->stop(); + } + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/appiconstarter/starterwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/appiconstarter/starterwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,62 @@ +/* +* 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: +* +*/ + +#ifndef STARTERWIDGET_H_ +#define STARTERWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +class QTimer; + +class starterwidget: public HbWidget + { + Q_OBJECT +public: + starterwidget( QGraphicsItem* parent = 0 ); + ~starterwidget(); +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + QGraphicsGridLayout* mGridLayout; + + HbPushButton* mStart1; + HbPushButton* mStart2; + + + +private slots: + void startopen1(); + void acivate1(); + void startopen2(); + void acivate2(); + + + +private: + + QString mMessage; + QTimer* mTimer1; + QTimer* mTimer2; + }; + +#endif /* STARTERWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/appiconstarter/viewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/appiconstarter/viewmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +/* +* 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 +#include +#include "viewmanager.h" +#include "starterwidget.h" + + + viewmanager::viewmanager(): + HbMainWindow() + { + mSw = new starterwidget(); + mSView = addView(mSw); + mSView->setTitle("Starter"); + + } + + viewmanager::~viewmanager() + { + } + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/appiconstarter/viewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/appiconstarter/viewmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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: +* +*/ +#ifndef VIEWMANAGER_H_ +#define VIEWMANAGER_H_ + +#include +#include +class starterwidget; + +class viewmanager : public HbMainWindow +{ + Q_OBJECT +public: + viewmanager(); + virtual ~viewmanager(); + void initialize(); + +private: + starterwidget* mSw; + HbView* mSView; + +}; + +#endif /* VIEWMANAGER_H_ */ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/gfx/qgn_menu_helloworldbasic.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/gfx/qgn_menu_helloworldbasic.svg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasic.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasic.hrh Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,27 @@ +/* +* ============================================================================== +* Name : helloworldbasic.hrh +* Part of : Helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2005-2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef __HELLOWORLDBASIC_HRH__ +#define __HELLOWORLDBASIC_HRH__ + +// HelloWorldBasic enumerate command codes +enum THelloWorldBasicIds + { + EHelloWorldBasicCommand1 = 0x6001, // start value must not be 0 + EHelloWorldBasicCommand2, + EHelloWorldBasicCommand3 + }; + +#endif // __HELLOWORLDBASIC_HRH__ \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasic.pan --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasic.pan Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* ============================================================================== +* Name : helloworldbasic.pan +* Part of : Helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2005-2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef __HELLOWORLDBASIC_PAN__ +#define __HELLOWORLDBASIC_PAN__ + +/** HelloWorldBasic application panic codes */ +enum THelloWorldBasicPanics + { + EHelloWorldBasicUi = 1 + // add further panics here + }; + +inline void Panic(THelloWorldBasicPanics aReason) + { + _LIT(applicationName,"HelloWorldBasic"); + User::Panic(applicationName, aReason); + } + +#endif // __HELLOWORLDBASIC_PAN__ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicapplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicapplication.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,54 @@ +/* +* ============================================================================== +* Name : helloworldbasicapplication.h +* Part of : Helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2005-2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef __HELLOWORLDBASICAPPLICATION_H__ +#define __HELLOWORLDBASICAPPLICATION_H__ + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* CHelloWorldBasicApplication application class. +* Provides factory to create concrete document object. +* An instance of CHelloWorldBasicApplication is the application part of the +* AVKON application framework for the HelloWorldBasic example application. +*/ +class CHelloWorldBasicApplication : public CAknApplication + { + public: // Functions from base classes + + /** + * From CApaApplication, AppDllUid. + * @return Application's UID (KUidHelloWorldBasicApp). + */ + TUid AppDllUid() const; + + protected: // Functions from base classes + + /** + * From CApaApplication, CreateDocumentL. + * Creates CHelloWorldBasicDocument document object. The returned + * pointer in not owned by the CHelloWorldBasicApplication object. + * @return A pointer to the created document object. + */ + CApaDocument* CreateDocumentL(); + }; + +#endif // __HELLOWORLDBASICAPPLICATION_H__ + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicappui.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicappui.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,84 @@ +/* +* ============================================================================== +* Name : helloworldbasicappui.h +* Part of : Helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2005-2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef __HELLOWORLDBASICAPPUI_H__ +#define __HELLOWORLDBASICAPPUI_H__ + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CHelloWorldBasicAppView; + + +// CLASS DECLARATION +/** +* CHelloWorldBasicAppUi application UI class. +* Interacts with the user through the UI and request message processing +* from the handler class +*/ +class CHelloWorldBasicAppUi : public CAknAppUi + { + public: // Constructors and destructor + + /** + * ConstructL. + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * CHelloWorldBasicAppUi. + * C++ default constructor. This needs to be public due to + * the way the framework constructs the AppUi + */ + CHelloWorldBasicAppUi(); + + /** + * ~CHelloWorldBasicAppUi. + * Virtual Destructor. + */ + virtual ~CHelloWorldBasicAppUi(); + + private: // Functions from base classes + + /** + * From CEikAppUi, HandleCommandL. + * Takes care of command handling. + * @param aCommand Command to be handled. + */ + void HandleCommandL( TInt aCommand ); + + /** + * HandleResourceChangeL() + * Called by framework when layout is changed. + * @param aType the type of resources that have changed + */ + void HandleResourceChangeL( TInt aType ); + + private: // Data + + /** + * The application view + * Owned by CHelloWorldBasicAppUi + */ + CHelloWorldBasicAppView* iAppView; + + }; + +#endif // __HELLOWORLDBASICAPPUI_H__ + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicappview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicappview.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,109 @@ +/* +* ============================================================================== +* Name : helloworldbasicappview.h +* Part of : Helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2005-2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef __HELLOWORLDBASICAPPVIEW_H__ +#define __HELLOWORLDBASICAPPVIEW_H__ + +// INCLUDES +#include + +// CLASS DECLARATION +class CHelloWorldBasicAppView : public CCoeControl + { + public: // New methods + + /** + * NewL. + * Two-phased constructor. + * Create a CHelloWorldBasicAppView object, which will draw itself to aRect. + * @param aRect The rectangle this view will be drawn to. + * @return a pointer to the created instance of CHelloWorldBasicAppView. + */ + static CHelloWorldBasicAppView* NewL( const TRect& aRect ); + + /** + * NewLC. + * Two-phased constructor. + * Create a CHelloWorldBasicAppView object, which will draw itself + * to aRect. + * @param aRect Rectangle this view will be drawn to. + * @return A pointer to the created instance of CHelloWorldBasicAppView. + */ + static CHelloWorldBasicAppView* NewLC( const TRect& aRect ); + + /** + * ~CHelloWorldBasicAppView + * Virtual Destructor. + */ + virtual ~CHelloWorldBasicAppView(); + + /** + * GetText + * @return modifiable reference to the descriptor, which stores + * user-given text + */ + TDes& GetText(); + + public: // Functions from base classes + + /** + * From CCoeControl, Draw + * Draw this CHelloWorldBasicAppView to the screen. + * If the user has given a text, it is also printed to the center of + * the screen. + * @param aRect the rectangle of this view that needs updating + */ + void Draw( const TRect& aRect ) const; + + /** + * From CoeControl, SizeChanged. + * Called by framework when the view size is changed. + */ + virtual void SizeChanged(); + + private: // Constructors + + /** + * ConstructL + * 2nd phase constructor. + * Perform the second phase construction of a + * CHelloWorldBasicAppView object. + * @param aRect The rectangle this view will be drawn to. + */ + void ConstructL(const TRect& aRect); + + /** + * CHelloWorldBasicAppView. + * C++ default constructor. + */ + CHelloWorldBasicAppView(); + + private: + + /** + * font used, when printing user-given text to the screen + */ + const CFont* iFont; + + /** + * descriptor storing the user-given text + */ + TBuf<24> iText; + }; + +#endif // __HELLOWORLDBASICAPPVIEW_H__ + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicdocument.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicdocument.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,97 @@ +/* +* ============================================================================== +* Name : helloworldbasicdocument.h +* Part of : Helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2005-2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef __HELLOWORLDBASICDOCUMENT_H__ +#define __HELLOWORLDBASICDOCUMENT_H__ + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CHelloWorldBasicAppUi; +class CEikApplication; + + +// CLASS DECLARATION + +/** +* CHelloWorldBasicDocument application class. +* An instance of class CHelloWorldBasicDocument is the Document part of the +* AVKON application framework for the HelloWorldBasic example application. +*/ +class CHelloWorldBasicDocument : public CAknDocument + { + public: // Constructors and destructor + + /** + * NewL. + * Two-phased constructor. + * Construct a CHelloWorldBasicDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of CHelloWorldBasicDocument. + */ + static CHelloWorldBasicDocument* NewL( CEikApplication& aApp ); + + /** + * NewLC. + * Two-phased constructor. + * Construct a CHelloWorldBasicDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of CHelloWorldBasicDocument. + */ + static CHelloWorldBasicDocument* NewLC( CEikApplication& aApp ); + + /** + * ~CHelloWorldBasicDocument + * Virtual Destructor. + */ + virtual ~CHelloWorldBasicDocument(); + + public: // Functions from base classes + + /** + * CreateAppUiL + * From CEikDocument, CreateAppUiL. + * Create a CHelloWorldBasicAppUi object and return a pointer to it. + * The object returned is owned by the Uikon framework. + * @return Pointer to created instance of AppUi. + */ + CEikAppUi* CreateAppUiL(); + + private: // Constructors + + /** + * ConstructL + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * CHelloWorldBasicDocument. + * C++ default constructor. + * @param aApp Application creating this document. + */ + CHelloWorldBasicDocument( CEikApplication& aApp ); + + }; + +#endif // __HELLOWORLDBASICDOCUMENT_H__ + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicquerydialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/inc/helloworldbasicquerydialog.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,63 @@ +/* +* ============================================================================== +* Name : helloworldbasicquerydialog.h +* Part of : helloworldbasic +* Interface : +* Description : +* Version : +* +* Copyright (c) 2006 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. +* ============================================================================== +*/ + +#ifndef HELLOWORLDQUERYDIALOG_H +#define HELLOWORLDQUERYDIALOG_H + + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* CHelloWorldQueryDialog class. +* This class is used to query the user for text information +*/ +class CHelloWorldQueryDialog : public CAknTextQueryDialog + { + public: // Constructors and destructor + + /** + * C++ default constructor. + * @param aBuf buffer to store the input + * @param aDefInput default input for the dialog + */ + CHelloWorldQueryDialog( TDes& aBuf, HBufC *aDefInput ); + + /** + * Destructor. + */ + virtual ~CHelloWorldQueryDialog() {}; + + private: // from CEikDialog + + /** + * sets the default value to the dialog. + */ + void PreLayoutDynInitL(); + + private: // Data + + /** + * the default input for the dialog + */ + HBufC& iDefInput; + }; + +#endif // HELLOWORLDQUERYDIALOG_H + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/src/helloworldbasic.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/src/helloworldbasic.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,38 @@ +/* +* 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 FILES +#include +#include "HelloWorldBasicApplication.h" + +/** + * factory function to create the Hello World Basic application class + */ +LOCAL_C CApaApplication* NewApplication() + { + return new CHelloWorldBasicApplication; + } + +/** + * A normal Symbian OS executable provides an E32Main() function which is + * called by the operating system to start the program. + */ +GLDEF_C TInt E32Main() + { + return EikStart::RunApplication( NewApplication ); + } + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/src/helloworldbasicappview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/src/helloworldbasicappview.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,146 @@ +/* +* 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 FILES +#include +#include +#include "HelloWorldBasicAppView.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicAppView* CHelloWorldBasicAppView::NewL( const TRect& aRect ) + { + CHelloWorldBasicAppView* self = CHelloWorldBasicAppView::NewLC( aRect ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::NewLC() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicAppView* CHelloWorldBasicAppView::NewLC( const TRect& aRect ) + { + CHelloWorldBasicAppView* self = new ( ELeave ) CHelloWorldBasicAppView; + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + return self; + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicAppView::ConstructL( const TRect& aRect ) + { + // Create a window for this application view + CreateWindowL(); + + // set the font + iFont = AknLayoutUtils::FontFromId(EAknLogicalFontPrimaryFont); + + iText.Zero(); + + // Set the windows size + SetRect( aRect ); + + // Activate the window, which makes it ready to be drawn + ActivateL(); + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::CHelloWorldBasicAppView() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicAppView::CHelloWorldBasicAppView() + { + // No implementation required + } + + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::~CHelloWorldBasicAppView() +// Destructor. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicAppView::~CHelloWorldBasicAppView() + { + // No implementation required + } + + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::Draw() +// Draws the display. +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicAppView::Draw( const TRect& /*aRect*/ ) const + { + // note that the whole screen is drawn everytime, so aRect-parameter + // is ignored + + // Get the standard graphics context + CWindowGc& gc = SystemGc(); + gc.SetPenStyle( CGraphicsContext::ENullPen ); + gc.SetBrushColor( KRgbWhite); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + + // Gets the control's extent + TRect rect( Rect()); + + // draw also text, if user has given it via dialog + if (iText.Length() > 0) + { + gc.UseFont(iFont); + gc.DrawText(iText, rect, Rect().Height()/3, CGraphicsContext::ECenter ); + gc.DiscardFont(); + } + else + { + gc.Clear( rect ); + } + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::SizeChanged() +// Called by framework when the view size is changed. +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicAppView::SizeChanged() + { + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppView::GetText() +// Called by AppUi to either set the text (via dialog) or zero the contents. +// ----------------------------------------------------------------------------- +// +TDes & CHelloWorldBasicAppView::GetText() + { + return iText; + } + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/src/helloworldbasicdocument.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/src/helloworldbasicdocument.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,98 @@ +/* +* 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 FILES +#include "HelloWorldBasicAppUi.h" +#include "HelloWorldBasicDocument.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicDocument::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicDocument* CHelloWorldBasicDocument::NewL( CEikApplication& + aApp ) + { + CHelloWorldBasicDocument* self = NewLC( aApp ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicDocument::NewLC() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicDocument* CHelloWorldBasicDocument::NewLC( CEikApplication& + aApp ) + { + CHelloWorldBasicDocument* self = + new ( ELeave ) CHelloWorldBasicDocument( aApp ); + + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicDocument::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicDocument::ConstructL() + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicDocument::CHelloWorldBasicDocument() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicDocument::CHelloWorldBasicDocument( CEikApplication& aApp ) + : CAknDocument( aApp ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CHelloWorldBasicDocument::~CHelloWorldBasicDocument() +// Destructor. +// --------------------------------------------------------------------------- +// +CHelloWorldBasicDocument::~CHelloWorldBasicDocument() + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CHelloWorldBasicDocument::CreateAppUiL() +// Constructs CreateAppUi. +// --------------------------------------------------------------------------- +// +CEikAppUi* CHelloWorldBasicDocument::CreateAppUiL() + { + // Create the application user interface, and return a pointer to it; + // the framework takes ownership of this object + return ( static_cast ( new ( ELeave ) + CHelloWorldBasicAppUi ) ); + } + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/common/src/helloworldbasicquerydialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/common/src/helloworldbasicquerydialog.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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 FILES + +#include +#include "HelloWorldBasicQueryDialog.h" + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CHelloWorldQueryDialog::CHelloWorldQueryDialog( TDes& aBuf, HBufC *aDefInput ) + : CAknTextQueryDialog( aBuf ) + , iDefInput(*aDefInput) + { + } + +// --------------------------------------------------------- +// CHelloWorldQueryDialog::PreLayoutDynInitL +// --------------------------------------------------------- +// +void CHelloWorldQueryDialog::PreLayoutDynInitL() + { + // first we have to execute PreLayoutDynInitL() of the base-class + CAknTextQueryDialog::PreLayoutDynInitL(); + + // acquire pointer to editor-control and set the default input. + CAknQueryControl* control = QueryControl(); + control->SetTextL(iDefInput); + + // enable OK-button, so that default text can be accepted as it is + // without modifying the text + MakeLeftSoftkeyVisible( ETrue ); + } + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/devide_sis.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/devide_sis.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,110 @@ +use strict; + +my $pkgbase = ";Language - standard language definitions +\&EN,FI,ZH,JA + +; standard SIS file header +\#{\"HelloWorldBasicREPLACE1\", \"HelloWorldBasicREPLACE1\", \"HelloWorldBasicREPLACE1\", \"HelloWorldBasicREPLACE1\"},(REPLACEUID),1,0,0 + +;Localised Vendor name +\%{\"Vendor-EN\", \"Vendor-FI\", \"Vendor-ZH\", \"Vendor-JA\"} + +;Unique Vendor name +:\"Vendor\" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {\"S60ProductID\", \"S60ProductID\", \"S60ProductID\", \"S60ProductID\"} + +"; + +my $pkgfiles = ";Files +\"\\epoc32\\release\\armv5\\urel\\HelloWorldBasicREPLACE2.exe\" -\"!:\\sys\\bin\\HelloWorldBasicREPLACE2.exe\" + +\"\\epoc32\\data\\z\\resource\\apps\\HelloWorldBasicREPLACE2.rsc\" -\"!:\\resource\\apps\\HelloWorldBasicREPLACE2.rsc\" +\"\\epoc32\\data\\z\\resource\\apps\\HelloWorldBasicREPLACE2.r09\" -\"!:\\resource\\apps\\HelloWorldBasicREPLACE2.r09\" +\"\\epoc32\\data\\z\\resource\\apps\\HelloWorldBasicREPLACE2.r31\" -\"!:\\resource\\apps\\HelloWorldBasicREPLACE2.r31\" +\"\\epoc32\\data\\z\\resource\\apps\\HelloWorldBasicREPLACE2.r32\" -\"!:\\resource\\apps\\HelloWorldBasicREPLACE2.r32\" + +\"\\epoc32\\data\\z\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.rsc\" -\"!:\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.rsc\" +\"\\epoc32\\data\\z\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.r09\" -\"!:\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.r09\" +\"\\epoc32\\data\\z\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.r31\" -\"!:\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.r31\" +\"\\epoc32\\data\\z\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.r32\" -\"!:\\private\\10003a3f\\import\\apps\\HelloWorldBasicREPLACE2_reg.r32\" +\"\\epoc32\\data\\z\\resource\\apps\\helloworldbasicREPLACE2_aif.mif\" -\"!:\\resource\\apps\\helloworldbasicREPLACE2_aif.mif\" +;end +"; + +my $appnum = shift; +my $baseuid = 0xA000018A; +my $defaultappforpkg = 5; +my $filenum = $appnum/$defaultappforpkg; +if ($appnum%$defaultappforpkg > 0) + { + $filenum++; + } + +generate(); + +sub generate() + { + my $i = 0; + for ( $i=1; $i<=$filenum; $i++ ) + { + my $filepart =".\\sis\\helloworldbasicPart".$i."\.pkg"; + open FW, ">$filepart" or die "Couldn't open $filepart to write"; + binmode FW; + print FW replaceheader($i); + my $fb = filesbegin($i); + my $fe = filesend($i); + for(my $f=$fb; $f<=$fe; $f++) + { + print FW replacefiles($f); + } + close FW; + } + } + +sub filesend() + { + my $fileiter = shift; + my $fend = $fileiter*$defaultappforpkg; + if($fend>$appnum) + { + $fend = $appnum; + } + return $fend; + } + +sub filesbegin() + { + my $fileiter = shift; + my $fbegin = ($fileiter-1)*$defaultappforpkg+1; + return $fbegin; + } + +sub replaceheader() + { + my $it = shift; + my $tempbuf = $pkgbase; + $tempbuf =~ s/REPLACE1/$it/sg; + $it = ($it-1)*$defaultappforpkg + 1; + my $tempuid = uid($it); + $tempbuf =~ s/REPLACEUID/$tempuid/sg; + return $tempbuf; + } + +sub replacefiles() + { + my $it = shift; + my $tempbuf = $pkgfiles; + $tempbuf =~ s/REPLACE2/$it/sg; + return $tempbuf; + } + +sub uid + { + my $iter = shift; + my $uuid = $baseuid + $iter -1; + my $hu = sprintf '%#X', $uuid; + $hu =~s/X/x/; + return $hu; + } diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/generate.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/generate.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,162 @@ +use strict; +use File::Find; + +my $appnum = shift; +my $baseuid = 0xA000018A; +my $baseuidstr = uid( 1 ); +my $base = `cd`; +$base =~s/(\s+)$//; #remove linefeed from end +my $patternbase = $base."\\pattern"; +my $globaliter = 0; + +generate(); + +sub generate() + { + my $i = 0; + for ( $i=1; $i<=$appnum; $i++ ) + { + $globaliter = $i; + createappdir($globaliter); + find( \&reader, $patternbase ); + } + createpkg(); + creategroup(); + system "perl devide_sis.pl $appnum"; + } + +sub uid + { + my $iter = shift; + my $uuid = $baseuid + $iter -1; + my $hu = sprintf '%#X', $uuid; + $hu =~s/X/x/; + return $hu; + } + +sub reader() + { + my $file=$_; + my $winpath=$File::Find::name; + $winpath=~s/\//\\/g; + my $nefilepath = ""; + if ( -f $file && not($winpath =~/svn/) ) + { + $nefilepath = newpath( $winpath, $globaliter ); + my $appuid = uid( $globaliter ); + rewritefile( $winpath, $nefilepath, $globaliter, $appuid ); + } + } + +sub newpath() +{ + my $patternpath = shift; + my $iter = shift; + my $appdir = "helloworldbasic".$iter; + my $appbasicfilepath = "basic".$iter; + my $appBasicfilepath = "Basic".$iter; + $patternpath =~ s/basic1/$appbasicfilepath/; + $patternpath =~ s/Basic1/$appBasicfilepath/; + $patternpath =~ s/pattern/$appdir/; + return $patternpath; +} + +sub createappdir() +{ + my $iter = shift; + my $appdir = "helloworldbasic".$iter; + my $src = $appdir."\\src"; + my $inc = $appdir."\\inc"; + my $data = $appdir."\\data"; + my $sis = $appdir."\\sis"; + my $group = $appdir."\\group"; + system "mkdir $appdir"; + system "mkdir $src"; + system "mkdir $inc"; + system "mkdir $data"; + system "mkdir $sis"; + system "mkdir $group"; +} + +sub rewritefile() +{ + my $input = shift; + my $output = shift; + my $iter = shift; + my $uid = shift; + my $basic = "basic".$iter; + my $Basic = "Basic".$iter; + my $World = "World".$iter; + + open FRI, $input or die "Couldn't open $input to read"; + binmode FRI; + open FWO, ">$output" or die "Couldn't open $output to write"; + binmode FWO; + while( ) + { + my $line = $_; + $line =~ s/basic1/$basic/g; + $line =~ s/Basic1/$Basic/g; + $line =~ s/World1/$World/g; + $line =~ s/$baseuidstr/$uid/gi; + print FWO $line; + } + close FRI; + close FWO; +} + +sub createpkg() +{ + system "mkdir sis"; + open FRS, ".\\pattern\\sis\\helloworldbasic_armv5.pkg" or die "Couldn't open pkg file to read"; + binmode FRS; + open FWS, ">sis\\helloworldbasic_armv5.pkg" or die "Couldn't open pkg file to write"; + binmode FWS; + my @exports; + my $begin = 0; + + while ( ) + { + my $line = $_; + print FWS $line; + if ($line =~ /;Files/) + { + $begin = 1; + } + if ($begin == 1) + { + push(@exports, $line); + } + } + close FRS; + + for (my $i=2; $i<=$globaliter; $i++) + { + my $basic = "basic".$i; + my $Basic = "Basic".$i; + my $it = 0; + while (defined($exports[$it])) + { + my $line = $exports[$it]; + $line =~ s/basic1/$basic/g; + $line =~ s/Basic1/$Basic/g; + print FWS $line; + $it++; + } + print FWS "\r\n\r\n"; + } + close FWS; +} + +sub creategroup() + { + system "mkdir group"; + open FWG, ">group\\bld.inf" or die "Couldn't open bld.inf file to write"; + binmode FWG; + for (my $i=1; $i<=$globaliter; $i++) + { + my $path = "../helloworldbasic".$i."/group/bld.inf"; + print FWG "\#include \"$path\"\r\n"; + } + } + close FWG; diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/HelloWorldBasic1_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/HelloWorldBasic1_reg.rss Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +/* +* 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 "Helloworldbasic1.rls" +#include +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0xA000018A + +RESOURCE APP_REGISTRATION_INFO + { + app_file="HelloWorldBasic1"; + localisable_resource_file = STRING_r_helloworldbasic_loc_resource_file_1; + localisable_resource_id = R_HELLOWORLDBASIC_LOCALISABLE_APP_INFO; + + embeddability=KAppNotEmbeddable; + newfile=KAppDoesNotSupportNewFile; + } + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1.rls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1.rls Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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: +* +*/ + +// LOCALISATION STRINGS + +#ifdef LANGUAGE_SC +#include "helloworldbasic1_01.rls" // default U.K. English +#elif defined LANGUAGE_01 +#include "helloworldbasic1_01.rls" // U.K. English +#elif defined LANGUAGE_09 +#include "helloworldbasic1_09.rls" // Finnish +#elif defined LANGUAGE_31 +#include "helloworldbasic1_31.rls" // PRC Chinese +#elif defined LANGUAGE_32 +#include "helloworldbasic1_32.rls" // Japanese +#endif \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1.rss Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,177 @@ +/* +* 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: +* +*/ + +// RESOURCE IDENTIFIER +NAME HEWB // 4 letter ID + + +// INCLUDES +#include +#include +#include +#include +#include "HelloWorldBasic.hrh" +#include "HelloWorldBasic1.rls" + +// RESOURCE DEFINITIONS +// ----------------------------------------------------------------------------- +// +// Define the resource file signature +// This resource should be empty. +// +// ----------------------------------------------------------------------------- +// +RESOURCE RSS_SIGNATURE + { + } + +// ----------------------------------------------------------------------------- +// +// Default Document Name +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_default_document_name + { + buf="HEWB"; + } + +// ----------------------------------------------------------------------------- +// +// Define default menu and CBA key. +// +// ----------------------------------------------------------------------------- +// +RESOURCE EIK_APP_INFO + { + menubar = r_helloworldbasic_menubar; + cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; + } + + +// ----------------------------------------------------------------------------- +// +// r_helloworldbasic_menubar +// Menubar for HelloWorldBasic example +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_helloworldbasic_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_helloworldbasic_menu; } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_helloworldbasic_menu +// Menu for "Options" +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_helloworldbasic_menu + { + items = + { + // added the new Options menu command here + MENU_ITEM + { + command = EHelloWorldBasicCommand1; + txt = STRING_r_hewb_command1; + }, + MENU_ITEM + { + command = EHelloWorldBasicCommand2; + txt = STRING_r_hewb_command2; + }, + MENU_ITEM + { + command = EHelloWorldBasicCommand3; + txt = STRING_r_hewb_command3; + }, + MENU_ITEM + { + command = EAknSoftkeyExit; + txt = STRING_r_hewb_exit; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// Resources for messages. +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF32 r_hewb_command1_text { buf=STRING_r_hewb_command1_text; } +RESOURCE TBUF32 r_hewb_file_text { buf=STRING_r_hewb_file_text; } +RESOURCE TBUF32 r_hewb_caption_string { buf=STRING_r_hewb_caption_string; } + +// ---------------------------------------------------------------------------- +// +// r_helloworldbasic_localisable_app_info +// +// ---------------------------------------------------------------------------- +// +RESOURCE LOCALISABLE_APP_INFO r_helloworldbasic_localisable_app_info + { + short_caption = STRING_r_hewb_caption_string; + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = STRING_r_hewb_caption_string; + + number_of_icons = 1; + icon_file = "\\resource\\apps\\Helloworldbasic1_aif.mif"; + }; + } + +// ---------------------------------------------------------------------------- +// +// r_dialog_text_edit_query +// +// ---------------------------------------------------------------------------- +// +RESOURCE DIALOG r_dialog_text_edit_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_OK_CANCEL; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_DATA_QUERY + { + layout = EDataLayout; + label = ""; + control = EDWIN + { + width = 32; + maxlength = 32; + lines = 1; + }; + }; + } + }; + } +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_01.rls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_01.rls Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ + +// LOCALISATION STRINGS + +//d:Caption string for app. +rls_string STRING_r_hewb_caption_string "HelloWorld1" + +//d:Short caption string for app. +rls_string STRING_r_hewb_short_caption_string "HW" + +//d:First item in "Options" menu pane, "hello" event. +rls_string STRING_r_hewb_command1 "Hello" + +//d:Second item in "Options" menu pane, "read from file" event. +rls_string STRING_r_hewb_command2 "Hello from file" + +//d:Third item in "Options" menu pane, "hello from edit" event. +rls_string STRING_r_hewb_command3 "Hello from edit" + +//d:Fourth item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_exit "Exit" + +//d:When user requests EHelloWorldBasicCommand1 event, text below is shown. +rls_string STRING_r_hewb_command1_text "Hello!" + +//d:When user requests EHelloWorldBasicCommand2 event, text below is shown. +rls_string STRING_r_hewb_file_text "Hello World!" + +rls_string STRING_r_helloworldbasic_loc_resource_file_1 "\\resource\\apps\\HelloWorldBasic1" + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_09.rls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_09.rls Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,48 @@ +/* +* 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: +* +*/ + +// LOCALISATION STRINGS + +//d:Caption string for app. +rls_string STRING_r_hewb_caption_string "Terve Maailma" + +//d:Short caption string for app. +rls_string STRING_r_hewb_short_caption_string "TM" + +//d:First item in "Options" menu pane, "hello" event. +rls_string STRING_r_hewb_command1 "Tervehdys" + +//d:Second item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_command2 "Tervehdys tiedostosta" + +//d:Third item in "Options" menu pane, "hello from edit" event. +rls_string STRING_r_hewb_command3 "Kirjoita tervehdys" + +//d:Fourth item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_exit "Sulje" + +//d:When user requests EHelloWorldBasicCommand1 event, text below is shown. +rls_string STRING_r_hewb_command1_text "Terve!" + +//d:When user requests EHelloWorldBasicCommand2 event, text below is shown. +rls_string STRING_r_hewb_file_text "Terve Maailma!" + + +rls_string STRING_r_helloworldbasic_loc_resource_file_1 "\\resource\\apps\\HelloWorldBasic1" + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_31.rls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_31.rls Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,48 @@ +/* +* 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: +* +*/ + +CHARACTER_SET UTF8 + +// LOCALISATION STRINGS + +//d:Caption string for app. +rls_string STRING_r_hewb_caption_string "世界 你好" + +//d:Short caption string for app. +rls_string STRING_r_hewb_short_caption_string "HW" + +//d:First item in "Options" menu pane, "hello" event. +rls_string STRING_r_hewb_command1 "你好" + +//d:Second item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_command2 "文件输出" + +//d:Third item in "Options" menu pane, "hello from edit" event. +rls_string STRING_r_hewb_command3 "输入文字" + +//d:Fourth item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_exit "退出" + +//d:When user requests EHelloWorldBasicCommand1 event, text below is shown. +rls_string STRING_r_hewb_command1_text "你好 !" + +//d:When user requests EHelloWorldBasicCommand2 event, text below is shown. +rls_string STRING_r_hewb_file_text "世界 你好 !" + +rls_string STRING_r_helloworldbasic_loc_resource_file_1 "\\resource\\apps\\HelloWorldBasic1" + +// End of File diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_32.rls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/data/helloworldbasic1_32.rls Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,48 @@ +/* +* 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: +* +*/ + +CHARACTER_SET UTF8 + +// LOCALISATION STRINGS + +//d:Caption string for app. +rls_string STRING_r_hewb_caption_string "ãƒãƒ­ãƒ¼ãƒ¯ãƒ¼ãƒ«ãƒ‰" + +//d:Short caption string for app. +rls_string STRING_r_hewb_short_caption_string "HW" + +//d:First item in "Options" menu pane, "hello" event. +rls_string STRING_r_hewb_command1 "ãƒãƒ­ãƒ¼" + +//d:Second item in "Options" menu pane, "hello from file" event. +rls_string STRING_r_hewb_command2 "フィイルを読む" + +//d:Third item in "Options" menu pane, "hello from edit" event. +rls_string STRING_r_hewb_command3 "編集ã™ã‚‹" + +//d:Fourth item in "Options" menu pane, "exit" event. +rls_string STRING_r_hewb_exit "終了" + +//d:When user requests EHelloWorldBasicCommand1 event, text below is shown. +rls_string STRING_r_hewb_command1_text "ãƒãƒ­ãƒ¼ !" + +//d:When user requests EHelloWorldBasicCommand2 event, text below is shown. +rls_string STRING_r_hewb_file_text "ãƒãƒ­ãƒ¼ãƒ¯ãƒ¼ãƒ«ãƒ‰ !" + +rls_string STRING_r_helloworldbasic_loc_resource_file_1 "\\resource\\apps\\HelloWorldBasic1" + +// End of File diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/group/Icons_scalable_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/group/Icons_scalable_dc.mk Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +# +# 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: +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z +else +ZDIR=$(EPOCROOT)epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\helloworldbasic1_aif.mif + +ICONDIR=..\..\common\gfx + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c32 $(ICONDIR)\qgn_menu_helloworldbasic.svg + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/group/bld.inf Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,28 @@ +/* +* 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: +* +*/ + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES + +gnumakefile icons_scalable_dc.mk + +HelloWorldBasic.mmp + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/group/helloworldbasic.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/group/helloworldbasic.mmp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,75 @@ +/* +* 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: +* +*/ + +TARGET HelloWorldBasic1.exe +TARGETTYPE exe +UID 0x100039CE 0xA000018A + + +EPOCSTACKSIZE 0x5000 + +SOURCEPATH ../src +SOURCE HelloWorldBasicApplication.cpp +SOURCE HelloWorldBasicAppUi.cpp + +SOURCEPATH ../../common/src +SOURCE HelloWorldBasic.cpp +SOURCE HelloWorldBasicAppView.cpp +SOURCE HelloWorldBasicDocument.cpp +SOURCE HelloWorldBasicQueryDialog.cpp + +SOURCEPATH ../data + +START RESOURCE HelloWorldBasic1.rss +HEADER +TARGETPATH resource/apps +END //RESOURCE + +START RESOURCE HelloWorldBasic1_reg.rss +#ifdef WINSCW +TARGETPATH /private/10003a3f/apps +#else +TARGETPATH /private/10003a3f/import/apps +#endif +END //RESOURCE + + + +USERINCLUDE ../inc +USERINCLUDE ../../common/inc +MW_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include + +LIBRARY euser.lib +LIBRARY apparc.lib +LIBRARY cone.lib +LIBRARY eikcore.lib +LIBRARY avkon.lib +LIBRARY commonengine.lib +LIBRARY efsrv.lib +LIBRARY estor.lib +LIBRARY eikcoctl.lib +LIBRARY eikdlg.lib + + +LANG SC 01 09 31 32 + +VENDORID 0 +CAPABILITY NONE + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/sis/helloworldbasic_armv5.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/sis/helloworldbasic_armv5.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +; helloworldbasic_armv5.pkg +; +;Language - standard language definitions +&EN,FI,ZH,JA + +; standard SIS file header +#{"HelloWorldBasic", "HelloWorldBasic", "HelloWorldBasic", "HelloWorldBasic"},(0xA000018A),1,0,0 + +;Localised Vendor name +%{"Vendor-EN", "Vendor-FI", "Vendor-ZH", "Vendor-JA"} + +;Unique Vendor name +:"Vendor" + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"S60ProductID", "S60ProductID", "S60ProductID", "S60ProductID"} + +;Files +"\epoc32\release\armv5\urel\HelloWorldBasic1.exe" -"!:\sys\bin\HelloWorldBasic1.exe" + +"\epoc32\data\z\resource\apps\HelloWorldBasic1.rsc" -"!:\resource\apps\HelloWorldBasic1.rsc" +"\epoc32\data\z\resource\apps\HelloWorldBasic1.r09" -"!:\resource\apps\HelloWorldBasic1.r09" +"\epoc32\data\z\resource\apps\HelloWorldBasic1.r31" -"!:\resource\apps\HelloWorldBasic1.r31" +"\epoc32\data\z\resource\apps\HelloWorldBasic1.r32" -"!:\resource\apps\HelloWorldBasic1.r32" + +"\epoc32\data\z\private\10003a3f\import\apps\HelloWorldBasic1_reg.rsc" -"!:\private\10003a3f\import\apps\HelloWorldBasic1_reg.rsc" +"\epoc32\data\z\private\10003a3f\import\apps\HelloWorldBasic1_reg.r09" -"!:\private\10003a3f\import\apps\HelloWorldBasic1_reg.r09" +"\epoc32\data\z\private\10003a3f\import\apps\HelloWorldBasic1_reg.r31" -"!:\private\10003a3f\import\apps\HelloWorldBasic1_reg.r31" +"\epoc32\data\z\private\10003a3f\import\apps\HelloWorldBasic1_reg.r32" -"!:\private\10003a3f\import\apps\HelloWorldBasic1_reg.r32" +"\epoc32\data\z\resource\apps\helloworldbasic1_aif.mif" -"!:\resource\apps\helloworldbasic1_aif.mif" +;end + + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/src/helloworldbasicapplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/src/helloworldbasicapplication.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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 FILES +#include "HelloWorldBasicDocument.h" +#include "HelloWorldBasicApplication.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// UID for the application; +// this should correspond to the uid defined in the mmp file +const TUid KUidHelloWorldBasicApp = { 0xA000018A }; + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicApplication::CreateDocumentL() +// Creates CApaDocument object +// ----------------------------------------------------------------------------- +// +CApaDocument* CHelloWorldBasicApplication::CreateDocumentL() + { + // Create an HelloWorldBasic document, and return a pointer to it + return (static_cast + ( CHelloWorldBasicDocument::NewL( *this ) ) ); + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicApplication::AppDllUid() +// Returns application UID +// ----------------------------------------------------------------------------- +// +TUid CHelloWorldBasicApplication::AppDllUid() const + { + // Return the UID for the HelloWorldBasic application + return KUidHelloWorldBasicApp; + } + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/generator/pattern/src/helloworldbasicappui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/generator/pattern/src/helloworldbasicappui.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,226 @@ +/* +* 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 FILES +#include +#include +#include +#include +#include +#include + +#include "HelloWorldBasic.pan" +#include "HelloWorldBasicAppUi.h" +#include "HelloWorldBasicAppView.h" +#include "HelloWorldBasic.hrh" +#include "HelloWorldBasicQueryDialog.h" + +_LIT( KHelloFileName, "Hello.txt" ); + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppUi::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicAppUi::ConstructL() + { + // Initialise app UI with standard value. + BaseConstructL(CAknAppUi::EAknEnableSkin); + + // Here the Hello.txt file is created. Because HelloWorld application is + // localized to various languages, the Hello.txt-file is created every time + // with current localization language + // + RFs fsSession; + User::LeaveIfError(fsSession.Connect()); + CleanupClosePushL( fsSession ); + TInt objectsInStack = 1; + + #if defined(__WINS__) || defined(__WINSCW__) + // create private folder, when testing in emulator. + // ignore the return value; if this fails, then file.Replace() will fail + // and a warning note will be printed. + // + fsSession.CreatePrivatePath(EDriveC); + #endif + + RFile file; + + // Create a file to write the text to + TInt err = file.Replace(fsSession, KHelloFileName, EFileWrite ); + if (KErrNone == err) + { + CleanupClosePushL( file ); + + RFileWriteStream outputFileStream( file ); + CleanupClosePushL( outputFileStream ); + + // Load a string from the resource file and stream it to file + HBufC* textResource = StringLoader::LoadLC( R_HEWB_FILE_TEXT ); + objectsInStack += 3; // file, outputFileStream, testResource + + outputFileStream << *textResource; + } + else + { + _LIT(KFileWriteFailed,"Writing file %S failed: error %d"); + CAknWarningNote* note = new ( ELeave ) CAknWarningNote(ETrue); + + TBuf<64> text; + text.Format(KFileWriteFailed, &KHelloFileName, err); + note->ExecuteLD( text ); + } + + CleanupStack::PopAndDestroy(objectsInStack, &fsSession); + + // Create view object + iAppView = CHelloWorldBasicAppView::NewL( ClientRect() ); + RProcess::Rendezvous(KErrNone); + + } +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppUi::CHelloWorldBasicAppUi() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicAppUi::CHelloWorldBasicAppUi() + { + // No implementation required + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppUi::~CHelloWorldBasicAppUi() +// Destructor. +// ----------------------------------------------------------------------------- +// +CHelloWorldBasicAppUi::~CHelloWorldBasicAppUi() + { + if ( iAppView ) + { + delete iAppView; + iAppView = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CHelloWorldBasicAppUi::HandleCommandL() +// Takes care of command handling. +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicAppUi::HandleCommandL( TInt aCommand ) + { + // clear possible old user-given text + if (iAppView->GetText().Size() > 0) + { + iAppView->GetText().Zero(); + iAppView->DrawNow(); + } + + switch( aCommand ) + { + case EEikCmdExit: + case EAknSoftkeyExit: + Exit(); + break; + + case EHelloWorldBasicCommand1: + { + // Load a string from the resource file and display it + HBufC* textResource = StringLoader::LoadLC( R_HEWB_COMMAND1_TEXT ); + CAknInformationNote* note = new ( ELeave ) CAknInformationNote; + + // Show the information Note with + // textResource loaded with StringLoader. + note->ExecuteLD( *textResource ); + + // Pop HBuf from CleanUpStack and Destroy it. + CleanupStack::PopAndDestroy( textResource ); + } + break; + + case EHelloWorldBasicCommand2: + { + RFs fsSession; + RFile rFile; + + // Connects a client process to the fileserver + User::LeaveIfError(fsSession.Connect()); + CleanupClosePushL(fsSession); + + //Open file where the stream text is + User::LeaveIfError(rFile.Open(fsSession,KHelloFileName, EFileStreamText)); + CleanupClosePushL(rFile); + + // copy stream from file to RFileStream object + RFileReadStream inputFileStream(rFile); + CleanupClosePushL(inputFileStream); + + // HBufC descriptor is created from the RFileStream object. + HBufC* fileData = HBufC::NewLC(inputFileStream, 32); + + CAknInformationNote* note = new ( ELeave ) CAknInformationNote; + + // Show the information Note + note->ExecuteLD( *fileData ); + + // Pop loaded resources from the cleanup stack: + // filedata, inputFileStream, rFile, fsSession + CleanupStack::PopAndDestroy(4, &fsSession); + } + break; + + case EHelloWorldBasicCommand3: + { + // Load a string from the resources and use it as a default value + HBufC* defaultText = StringLoader::LoadLC( R_HEWB_FILE_TEXT ); + + CHelloWorldQueryDialog *dlg = new (ELeave) + CHelloWorldQueryDialog( iAppView->GetText(), defaultText ); + + dlg->ExecuteLD( R_DIALOG_TEXT_EDIT_QUERY ); + iAppView->DrawNow(); + + // Pop HBuf from CleanUpStack and Destroy it. + CleanupStack::PopAndDestroy( defaultText ); + } + break; + + default: + break; + } + } +// ----------------------------------------------------------------------------- +// Called by framework when layout is changed. +// Passes the new client rectangle to the AppView +// ----------------------------------------------------------------------------- +// +void CHelloWorldBasicAppUi::HandleResourceChangeL( TInt aType ) +{ + // base-class call also + CAknAppUi::HandleResourceChangeL(aType); + if (aType == KEikDynamicLayoutVariantSwitch) + { + if (iAppView) + iAppView->SetRect( ClientRect() ); + } +} + +// End of File + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/hellostarter/hellostarter.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/hellostarter/hellostarter.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = hellostarter + +CONFIG += console +load(hb.prf) +CONFIG -= symbian_i18n + + +SOURCES += main.cpp\ +lunchwidget.cpp + +HEADERS += lunchwidget.h \ + +LIBS += -lxqutils \ + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/hellostarter/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/hellostarter/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,219 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include "tstasksettings.h" +#include +#include +#include +#include +#include +#include +#include + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent), mActionCounter(0) +{ + mFile = new QFile("c:\\data\\helloworldstarter.txt"); + mFile->open(QIODevice::Append | QIODevice::Text); + mStream = new QTextStream(mFile); + + mResultLabel = new HbLabel("idle"); + mTenLabel= new HbLabel("10x"); + mOneLabel= new HbLabel("1x"); + mPlusLabel= new HbLabel("+"); + + + mStartButton = new HbPushButton("Start"); + mCloseButton = new HbPushButton("Close"); + mAutoButton = new HbPushButton("Auto"); + + + mTenCombo = new HbComboBox(); + mOneCombo = new HbComboBox(); + for (int i=0; i<10; i++) { + QString num; + num.setNum(i); + mTenCombo->addItem(num); + mOneCombo->addItem(num); + } + + mTimesEdid = new HbLineEdit("300"); + mTimesEdid->setObjectName("TimesEditLine"); + mQTimesValidator = new QIntValidator(this); + mQTimesValidator->setRange(0, 1000000); + mTimesValidator = new HbValidator(this); + mTimesValidator->addField(mQTimesValidator, "300"); + mTimesEdid->setValidator(mTimesValidator); + + mTimesLabel = new HbLabel("Times:"); + mCounterLabel = new HbLabel("Count:"); + mCounterValueLabel = new HbLabel(""); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mResultLabel, 0, 0, 1, 6); + mGridLayout->addItem(mStartButton, 1, 0, 1, 2); + mGridLayout->addItem(mCloseButton, 1, 3, 1, 2); + mGridLayout->addItem(mAutoButton, 1, 5, 1, 2); + mGridLayout->addItem(mTenLabel, 2, 0, 1, 2); + mGridLayout->addItem(mPlusLabel, 2, 2, 1, 2); + mGridLayout->addItem(mOneLabel, 2, 4, 1, 2); + mGridLayout->addItem(mTenCombo, 3, 0, 1, 3); + mGridLayout->addItem(mOneCombo, 3, 4, 1, 3); + mGridLayout->addItem(mTimesLabel, 4, 0, 1, 2); + mGridLayout->addItem(mTimesEdid, 4, 3, 1, 4); + mGridLayout->addItem(mCounterLabel, 5, 0, 1, 3); + mGridLayout->addItem(mCounterValueLabel, 5, 4, 1, 3); + + setLayout(mGridLayout); + + connect( mStartButton, SIGNAL(released()), this, SLOT(start()) ); + connect( mCloseButton, SIGNAL(released()), this, SLOT(stop()) ); + connect( mAutoButton, SIGNAL(released()), this, SLOT(automat()) ); + + mTimer = new QTimer(this); + connect(mTimer, SIGNAL(timeout()), this, SLOT(timeout())); + +} + +lunchwidget::~lunchwidget() +{ + delete mFile; + delete mStream; + delete mQTimesValidator; + delete mTimesValidator; +} + +void lunchwidget::start() +{ + int ten = mTenCombo->currentText().toInt(); + int one = mOneCombo->currentText().toInt(); + int num = ten*10+one; + for (int i=1; i<=num; i++) { + QString application; + application = tr("HelloWorldBasic%1").arg(i); + mResultLabel->setPlainText(application); + HBufC *appName = XQConversions::qStringToS60Desc(application); + CleanupStack::PushL(appName); + + RProcess process; + CleanupClosePushL(process); + + bool result = false; + if (process.Create(*appName, KNullDesC()) == KErrNone) { + // wait until process reports it's ready + TRequestStatus stat; + process.Rendezvous(stat); + process.Resume(); + User::WaitForRequest(stat); + + if (stat.Int() == KErrNone) { + result = true; + User::After(1000); + } + } + + CleanupStack::PopAndDestroy(&process); + CleanupStack::PopAndDestroy(appName); + } +} + +void lunchwidget::stop() +{ + RProcess application; + TFindProcess finder(_L("*hello*")); + TFullName fullname; + while (finder.Next(fullname) == KErrNone) { + TInt err = application.Open(fullname); + if (err==KErrNone && (application.FileName().Find(_L("HelloWorldBasic"))>=0 || application.FileName().Find(_L("helloworldbasic"))>=0)) { + application.Terminate(KErrCancel); + User::After(1000); + } + application.Close(); + } +} + +void lunchwidget::timeout() +{ + if(mActionCounter == mTimes) { + stop(); + mTimer->stop(); + *mStream<<"end\n"; + mStream->flush(); + enableControls(true); + } + if(!mOpened) { + start(); + mOpened = true; + } + else { + stop(); + mOpened = false; + mActionCounter++; + *mStream<flush(); + setCounterLabel(mActionCounter); + } + + +} + +void lunchwidget::automat() +{ + mTimes = times(); + mActionCounter = 0; + *mStream<<"auto open\n"; + mStream->flush(); + mOpened = false; + enableControls(false); + mTimer->start(2000); +} + +void lunchwidget::enableControls(bool enable) +{ + mStartButton->setEnabled(enable); + mCloseButton->setEnabled(enable); + mAutoButton->setEnabled(enable); + mTenCombo->setEnabled(enable); + mOneCombo->setEnabled(enable); + mTimesEdid->setEnabled(enable); +} + +void lunchwidget::setCounterLabel(int count) +{ + QString num; + num.setNum(count); + mCounterValueLabel->setPlainText(num); +} + +int lunchwidget::times() +{ + QString ttext = mTimesEdid->text(); + bool ok; + int times = ttext.toInt(&ok); + if(!ok) { + times = 0; + } + return times; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/hellostarter/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/hellostarter/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,85 @@ +/* +* 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: +* +*/ +#ifndef LUNCHWIDGET_H_ +#define LUNCHWIDGET_H_ + +#include +#include +#include +#include +#include + +class HbComboBox; +class QFile; +class QTextStream; +class QTimer; +class HbValidator; +class HbLineEdit; + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mStartButton; + HbPushButton *mCloseButton; + HbPushButton *mAutoButton; + HbComboBox *mTenCombo; + HbComboBox *mOneCombo; + HbLineEdit* mTimesEdid; + HbLabel* mResultLabel; + HbLabel* mTenLabel; + HbLabel* mPlusLabel; + HbLabel* mOneLabel; + HbLabel* mTimesLabel; + HbLabel* mCounterLabel; + HbLabel* mCounterValueLabel; + + QFile* mFile; + QTextStream* mStream; + + QTimer* mTimer; + int mActionCounter; + int mTimes; + bool mOpened; + + QIntValidator* mQTimesValidator; + HbValidator* mTimesValidator; + + +private: + + +private slots: + void start(); + void stop(); + void automat(); + void timeout(); + +private: + void enableControls(bool enable); + void setCounterLabel(int count); + int times(); + +}; + +#endif /* LUNCHWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/hellostarter/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/hellostarter/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include "lunchwidget.h" + + + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/generator/hellostarter/sis/hellostarter_template.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/generator/hellostarter/sis/hellostarter_template.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,34 @@ +; hellostarter_template.pkg generated by qmake at 2010-06-22T12:32:21 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + + +; SIS header: name, uid, version +#{"hellostarter"},(0xEfef8279),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + + +; Manual PKG pre-rules from PRO files +; Default dependency to Qt libraries + +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + + +; Executable and default resource files +"/epoc32/release/armv5/urel/hellostarter.exe" - "!:\sys\bin\hellostarter.exe" +"/epoc32/data/z/resource/apps/hellostarter.rsc" - "!:\resource\apps\hellostarter.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/hellostarter_reg.rsc" - "!:\private\10003a3f\import\apps\hellostarter_reg.rsc" + +; Manual PKG post-rules from PRO files diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/embedded.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/embedded.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +# 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: + +TEMPLATE = app +TARGET = embededservices +load(hb.prf) +CONFIG -= symbian_i18n +CONFIG += service + + + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +MOC_DIR = moc + +# Input +HEADERS += testservicemainwindow.h \ + testservicehandler.h + + +SOURCES += main.cpp \ + testservicemainwindow.cpp \ + testservicehandler.cpp + + +# capability +TARGET.CAPABILITY = CAP_APPLICATION + + + +TARGET.UID3 = 0xE9f8e3f9 + +LIBS += -lxqservice \ + -lxqserviceutil \ + -lhbcore + +SERVICE.FILE = service_conf.xml +SERVICE.OPTIONS = embeddable +#SERVICE.OPTIONS += hidden diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include "testservicemainwindow.h" +#include "testservicehandler.h" + +int main(int argc, char **argv) +{ + HbApplication a( argc, argv ); + + TestServiceHandler *handler = new TestServiceHandler(); + TestServiceMainWindow mainWindow(handler); + + mainWindow.show(); + + return a.exec(); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/service_conf.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/service_conf.xml Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + Embedded service + + requestSetTitle interface + + \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/testservicehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/testservicehandler.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* + * 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 "testservicehandler.h" + + + +TestServiceHandler::TestServiceHandler(QObject *parent): + XQServiceProvider(QLatin1String("com.nokia.services.embeddedservices.requestSetTitle"), parent), + mCurrentRequestIndex(0), mTitle("Embedded") +{ + publishAll(); +} + +TestServiceHandler::~TestServiceHandler() +{ +} + +void TestServiceHandler::completeRequestSetTitle(const QString& title) +{ + QVariant retValue; + retValue.setValue(title); + bool ok = completeRequest(mCurrentRequestIndex, retValue); + mCurrentRequestIndex = 0; +} + + +void TestServiceHandler::requestSetTitle(const QString &title) +{ + mTitle = title; + mCurrentRequestIndex = setCurrentRequestAsync(); + emit launchSetTitle(title); +} + +QString TestServiceHandler::title() +{ + return mTitle; +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/testservicehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/testservicehandler.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* + * 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: + * + */ + +#ifndef TESTSERVICEHANDLER_H +#define TESTSERVICEHANDLER_H + +#include +#include +#include + +QTM_USE_NAMESPACE + +class TestServiceHandler : public XQServiceProvider +{ + Q_OBJECT +public: + TestServiceHandler(QObject *parent = 0); + ~TestServiceHandler(); + +public: + void completeRequestSetTitle(const QString& title); + QString title(); + +public slots: + // Services offered to clients + void requestSetTitle(const QString &title); + +signals: + void launchSetTitle(const QString &title); + + +private: + int mCurrentRequestIndex; + QString mTitle; +}; + +#endif /* TESTSERVICEHANDLER_H */ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/testservicemainwindow.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/testservicemainwindow.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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 "testservicemainwindow.h" +#include "testservicehandler.h" +#include + +TestServiceMainWindow::TestServiceMainWindow(TestServiceHandler *handler, QWidget *parent): + HbMainWindow(parent), + mServiceHandler(handler) +{ + mView = new HbView; + addView( mView ); + currentView()->setTitle(mServiceHandler->title()); + connect(mServiceHandler, SIGNAL(launchSetTitle(QString)), this, SLOT(requestSetTitle(QString))); +} + +TestServiceMainWindow::~TestServiceMainWindow() +{ + delete mServiceHandler; + mServiceHandler = 0; +} + +void TestServiceMainWindow::requestSetTitle(const QString& title) +{ + QString newTitle = tr("Embedded ") + title; + currentView()->setTitle(newTitle); + mServiceHandler->completeRequestSetTitle(currentView()->title()); +} +// end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/embedded/testservicemainwindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/embedded/testservicemainwindow.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* +*/ + +#ifndef TESTSERVICEMAINWINDOW_H +#define TESTSERVICEMAINWINDOW_H + +#include +#include + +class HbView; +class TestServiceHandler; + +class TestServiceMainWindow : public HbMainWindow +{ + Q_OBJECT + +public: + TestServiceMainWindow(TestServiceHandler *handler, QWidget *parent=0); + ~TestServiceMainWindow(); + +public slots: + void requestSetTitle(const QString& title); + +private: + HbView* mView; + TestServiceHandler* mServiceHandler; +}; + +#endif // TESTSERVICEMAINWINDOW_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/parent/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/parent/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,109 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +QTM_USE_NAMESPACE + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + + mTitle = "trompka"; + mLunchButton = new HbPushButton("Lunch embedded app"); + mResultLabel = new HbLabel; + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mResultLabel, 0, 0, 1, 1); + mGridLayout->addItem(mLunchButton, 1, 0, 1, 1); + setLayout(mGridLayout); + + + connect(mLunchButton, SIGNAL(released()), this, SLOT(lunchApp())); + + QStringList list = hbApp->arguments(); + int count = list.count(); + + mTimer = new QTimer; + if( count >= 2 ) { + mTitle = list.at(1); + connect( mTimer, SIGNAL(timeout()), this, SLOT(timeout()) ); + mTimer->start(1); + } +} + +lunchwidget::~lunchwidget() +{ + delete mTimer; +} + +void lunchwidget::lunchApp() +{ + QList args; + QString serviceName("com.nokia.services.embeddedservices"); + QString operation("requestSetTitle(QString)"); + XQAiwRequest* request; + XQApplicationManager appManager; + request = appManager.create(serviceName, "requestSetTitle", operation, true); //embedded + if ( request == NULL ) + { + mResultLabel->setPlainText( "request failed" ); + return; + } + + // Result handlers + connect (request, SIGNAL(requestOk(const QVariant&)), + this, SLOT(setTitleCompleted(const QVariant&))); + connect (request, SIGNAL(requestError(int,const QString&)), + this, SLOT(serviceRequestError(int,const QString&))); + + args << mTitle; + + + request->setArguments(args); + if(!request->send()) { + mResultLabel->setPlainText( "sending request failed" ); + } + delete request; +} + +void lunchwidget::setTitleCompleted(const QVariant& data) +{ + QString title = data.toString(); + mResultLabel->setPlainText( title ); +} + +void lunchwidget::serviceRequestError(int err,const QString& msg) +{ + QString errmsg = tr("Error: %1, ").arg(err); + errmsg += msg; + mResultLabel->setPlainText( errmsg ); +} + +void lunchwidget::timeout() + { + mTimer->stop(); + lunchApp(); + } diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/parent/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/parent/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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: +* +*/ +#ifndef LUNCWIDGET_H_ +#define LUNCWIDGET_H_ + +#include +#include +#include +#include +#include +#include + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mLunchButton; + HbLabel* mResultLabel; + QObject *mActivityManager; + +private slots: + void lunchApp(); + + void setTitleCompleted(const QVariant& data); + void serviceRequestError(int err,const QString& msg); + void timeout(); + +private: + QTimer* mTimer; + QString mTitle; +}; + +#endif /* LUNCWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/parent/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/parent/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include +#include "lunchwidget.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.currentView()->setTitle("Parent"); + mainWindow.show(); + RProcess::Rendezvous(KErrNone); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/parent/parent.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/parent/parent.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = parent + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +lunchwidget.cpp + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +HEADERS += lunchwidget.h + +LIBS += -lxqutils \ + -lxqservice \ + -lxqserviceutil + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB + TARGET.UID3 = 0xEf628f4b +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/parentembedded/parentembedded.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/parentembedded/parentembedded.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += parent +SUBDIRS += embedded diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/sis/testscreenapp.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/sis/testscreenapp.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ +; tstestcatapp_template.pkg generated by qmake at 2010-05-07T15:46:05 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + +; SIS header: name, uid, version +#{"testscreenapp"},(0xE8d0bcd4),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + + +; Manual PKG pre-rules from PRO files +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +; Default dependency to Qt libraries + +; Executable and default resource files +"/epoc32/release/armv5/urel/tstestcatapp.exe" - "!:\sys\bin\tstestcatapp.exe" +"/epoc32/data/z/resource/apps/tstestcatapp.rsc" - "!:\resource\apps\tstestcatapp.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tstestcatapp_reg.rsc" - "!:\private\10003a3f\import\apps\tstestcatapp_reg.rsc" + +"/epoc32/release/armv5/urel/tstestdogapp.exe" - "!:\sys\bin\tstestdogapp.exe" +"/epoc32/data/z/resource/apps/tstestdogapp.rsc" - "!:\resource\apps\tstestdogapp.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tstestdogapp_reg.rsc" - "!:\private\10003a3f\import\apps\tstestdogapp_reg.rsc" + +"/epoc32/release/armv5/urel/parent.exe" - "!:\sys\bin\parent.exe" +"/epoc32/data/z/resource/apps/parent.rsc" - "!:\resource\apps\parent.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/parent_reg.rsc" - "!:\private\10003a3f\import\apps\parent_reg.rsc" + +"/epoc32/release/armv5/urel/embededservices.exe" - "!:\sys\bin\embededservices.exe" +"/epoc32/data/z/resource/apps/embededservices.rsc" - "!:\resource\apps\embededservices.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/embededservices_reg.rsc" - "!:\private\10003a3f\import\apps\embededservices_reg.rsc" + +"/epoc32/release/armv5/urel/tssystemapp.exe" - "!:\sys\bin\tssystemapp.exe" +"/epoc32/data/z/resource/apps/tssystemapp.rsc" - "!:\resource\apps\tssystemapp.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tssystemapp_reg.rsc" - "!:\private\10003a3f\import\apps\tssystemapp_reg.rsc" + +"/epoc32/release/armv5/urel/appiconstarter.exe" - "!:\sys\bin\appiconstarter.exe" +"/epoc32/data/z/resource/apps/appiconstarter.rsc" - "!:\resource\apps\appiconstarter.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/appiconstarter_reg.rsc" - "!:\private\10003a3f\import\apps\appiconstarter_reg.rsc" + +"/epoc32/release/armv5/urel/tsserviceloader.exe" - "!:\sys\bin\tsserviceloader.exe" +"/epoc32/data/z/resource/apps/tsserviceloader.rsc" - "!:\resource\apps\tsserviceloader.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tsserviceloader_reg.rsc" - "!:\private\10003a3f\import\apps\tsserviceloader_reg.rsc" + +"/epoc32/release/armv5/urel/tspluginmanager.exe" - "!:\sys\bin\tspluginmanager.exe" +"/epoc32/data/z/resource/apps/tspluginmanager.rsc" - "!:\resource\apps\tspluginmanager.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tspluginmanager_reg.rsc" - "!:\private\10003a3f\import\apps\tspluginmanager_reg.rsc" +; DEPLOYMENT +"/epoc32/data/z/resource/qt/crml/tspluginmanager.qcrml" - "!:\resource\qt\crml\tspluginmanager.qcrml" + +"/epoc32/release/armv5/urel/fakeplugin.dll" - "!:\sys\bin\fakeplugin.dll" +"/epoc32/data/z/resource/qt/plugins/fakeplugin.qtplugin" - "!:\resource\qt\plugins\fakeplugin.qtplugin" +"/epoc32/data/z/resource/taskswitcher/tsfakelplugin.xml" - "!:\resource\taskswitcher\tsfakelplugin.xml" \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/testapplications.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/testapplications.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += tstestdogapp +SUBDIRS += tstestcatapp +SUBDIRS += parentembedded +SUBDIRS += appiconstarter +SUBDIRS += tsserviceloader +SUBDIRS += tstestpluginmanager +SUBDIRS += tssystemapp \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tsserviceloader/data/tstestmodelplugin.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tsserviceloader/data/tstestmodelplugin.xml Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,11 @@ + + + TsTestModelPlugin + tstestmodelplugin + Sample model plugin for Task Switcher + + com.nokia.qt.taskswitcher.dataprovider + 1.0 + test + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tsserviceloader/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tsserviceloader/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,77 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include + + + + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + mManager = new QServiceManager; + mActivationButton = new HbPushButton("Activity"); + mProviderButton = new HbPushButton("Provider"); + mResultLabel = new HbLabel; + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mResultLabel, 0, 0, 1, 1); + mGridLayout->addItem(mActivationButton, 1, 0, 1, 1); + mGridLayout->addItem(mProviderButton, 2, 0, 1, 1); + setLayout(mGridLayout); + + + connect(mActivationButton, SIGNAL(released()), this, SLOT(lunchActivation())); + connect(mProviderButton, SIGNAL(released()), this, SLOT(lunchProvider())); + +} + +lunchwidget::~lunchwidget() +{ + +} + +void lunchwidget::lunchActivation() +{ + bool ok = mManager->addService(":/activityserviceplugin.xml"); + setError(ok, mManager->error()); +} + +void lunchwidget::lunchProvider() +{ + bool ok = mManager->addService(":/tstestmodelplugin.xml"); + setError(ok, mManager->error()); +} + + +void lunchwidget::setError(bool ok, int err) +{ + if (!ok) { + QString num; + num.setNum(err); + mResultLabel->setPlainText(num); + } + else { + mResultLabel->setPlainText("Ok"); + } +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tsserviceloader/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tsserviceloader/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ +#ifndef LUNCWIDGET_H_ +#define LUNCWIDGET_H_ + +#include +#include +#include +#include +#include + + +QTM_USE_NAMESPACE + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mActivationButton; + HbPushButton *mProviderButton; + HbLabel* mResultLabel; + QServiceManager* mManager; + +private slots: + void lunchActivation(); + void lunchProvider(); + + void setError(bool ok, int err); +}; + +#endif /* LUNCWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tsserviceloader/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tsserviceloader/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include +#include "lunchwidget.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.currentView()->setTitle("Parent"); + mainWindow.show(); + RProcess::Rendezvous(KErrNone); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tsserviceloader/tsserviceloader.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tsserviceloader/tsserviceloader.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = tsserviceloader + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework + +SOURCES += main.cpp\ +lunchwidget.cpp + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +HEADERS += lunchwidget.h + + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB +} + + +RESOURCES += tsserviceloader.qrc + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tsserviceloader/tsserviceloader.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tsserviceloader/tsserviceloader.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,6 @@ + + + ../../../activityfw/activityserviceplugin/data/afservice.xml + ./data/tstestmodelplugin.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tssystemapp/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tssystemapp/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,128 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include "tstasksettings.h" +#include +#include +#include + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + + mSystemtLabel = new HbLabel; + //mNameLabel = new HbLabel; + + mSystemToogleButton = new HbPushButton("Toogle system"); + //mNameToogleButton = new HbPushButton("Toogle name"); + + + + mGridLayout = new QGraphicsGridLayout(); + + mGridLayout->addItem(mSystemtLabel, 0, 0, 1, 1); + mGridLayout->addItem(mSystemToogleButton, 1, 0, 1, 1); + //mGridLayout->addItem(mNameLabel, 2, 0, 1, 1); + //mGridLayout->addItem(mNameToogleButton, 3, 0, 1, 1); + + setLayout(mGridLayout); + + connect( mSystemToogleButton, SIGNAL(released()), this, SLOT(toogleSystem()) ); + //connect( mNameToogleButton, SIGNAL(released()), this, SLOT(toogleName()) ); + + mSystemtLabel->setPlainText("system"); + //toogleSystem(); + //mNameLabel->setPlainText("name1"); + //toogleName(); +} + +lunchwidget::~lunchwidget() +{ +} + +void lunchwidget::toogleSystem() +{ + bool system; + if( mSystemtLabel->plainText() == "system" ) { + system = false; + mSystemtLabel->setPlainText("not system"); + } + else { + system = true; + mSystemtLabel->setPlainText("system"); + } + + TRAPD(err, toogleSystemL(system)); + if (err!=KErrNone) { + QString errstr; + errstr.setNum(err); + mSystemtLabel->setPlainText(errstr); + } + +} + +void lunchwidget::toogleSystemL(bool system) +{ + CEikonEnv * env = CEikonEnv::Static(); + env->SetSystem(system); + /*CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(env->WsSession()); + wgName->SetSystem(system); + wgName->SetAppUid(TUid::Uid(0xE9340220)); + wgName->SetWindowGroupName(env->RootWin()); + CleanupStack::PopAndDestroy(wgName);*/ +} + +void lunchwidget::toogleName() +{ + QString name; + if( mNameLabel->plainText() == "name1" ) { + name = "NAME2"; + mNameLabel->setPlainText("NAME2"); + } + else { + name = "name1"; + mNameLabel->setPlainText("name1"); + } + + TRAPD(err, toogleNameL(name)); + if (err!=KErrNone) { + QString errstr; + errstr.setNum(err); + mNameLabel->setPlainText(errstr); + } +} + +void lunchwidget::toogleNameL(QString name) +{ + CEikonEnv * env = CEikonEnv::Static(); + CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(env->WsSession()); + HBufC *nameS60 = XQConversions::qStringToS60Desc(name); + CleanupStack::PushL(nameS60); + wgName->SetCaptionL(*nameS60); + CleanupStack::PopAndDestroy(nameS60); + env->UpdateTaskNameL(); + CleanupStack::PopAndDestroy(wgName); +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tssystemapp/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tssystemapp/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,57 @@ +/* +* 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: +* +*/ +#ifndef LUNCHWIDGET_H_ +#define LUNCHWIDGET_H_ + +#include +#include +#include +#include +#include + +class HbComboBox; +class TsTaskSettings; + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mSystemToogleButton; + HbPushButton *mNameToogleButton; + HbLabel* mSystemtLabel; + HbLabel* mNameLabel; + +private: + void toogleSystemL(bool system); + void toogleNameL(QString name); + + +private slots: + void toogleSystem(); + void toogleName(); + + +private: +}; + +#endif /* LUNCHWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tssystemapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tssystemapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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 +#include +#include "lunchwidget.h" + +#include +#include + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.show(); + + CEikonEnv * env = CEikonEnv::Static(); + CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(env->WsSession()); + env->SetSystem(true); + //wgName->SetCaptionL(_L("trompka")); + wgName->SetAppUid(TUid::Uid(0xE9340220)); + wgName->SetSystem(true); + wgName->SetWindowGroupName(env->RootWin()); + + CleanupStack::PopAndDestroy(wgName); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tssystemapp/tssystemapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tssystemapp/tssystemapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = tssystemapp + +CONFIG += console +load(hb.prf) +CONFIG -= symbian_i18n + + +SOURCES += main.cpp\ +lunchwidget.cpp + +HEADERS += lunchwidget.h \ + + + LIBS += -lxqutils + LIBS += -lapgrfx + LIBS += -leikcore + LIBS += -lcone + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB + TARGET.UID3 = 0xE9340220 +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/images/lion.jpg Binary file taskswitcher/testapplications/tstestcatapp/images/lion.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/images/puma.jpg Binary file taskswitcher/testapplications/tstestcatapp/images/puma.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestcatapp/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,175 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include "tstasksettings.h" + + + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + mClient = new TsTaskSettings; + + mAnimal1 = new QPixmap(":/images/lion.jpg"); + mAnimal2 = new QPixmap(":/images/puma.jpg"); + + mResultLabel = new HbLabel; + mPhotoLabel= new HbLabel; + // mPriorityLabel = new HbLabel("Priority"); + + mRegisterButton = new HbPushButton("Register"); + mUnregisterButton = new HbPushButton("Unregister"); + mHideButton = new HbPushButton("Hide me"); + mShowButton = new HbPushButton("Show me"); + mAnimal1Button = new HbPushButton("Lion"); + mAnimal2Button = new HbPushButton("Puma"); + mClearButton = new HbPushButton("Clear"); + + /*mPriorityCombo = new HbComboBox(); + mPriorityCombo->addItem("default"); + mPriorityCombo->addItem("low"); + mPriorityCombo->addItem("medium"); + mPriorityCombo->addItem("high");*/ + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mPhotoLabel, 0, 0, 6, 6); + mGridLayout->addItem(mResultLabel, 6, 0, 1, 3); + mGridLayout->addItem(mClearButton, 6, 4, 1, 3); + //mGridLayout->addItem(mPriorityLabel, 7, 0, 1, 3); + //mGridLayout->addItem(mPriorityCombo, 7, 4, 1, 3); + mGridLayout->addItem(mRegisterButton, 7, 0, 1, 3); + mGridLayout->addItem(mUnregisterButton, 7, 4, 1, 3); + mGridLayout->addItem(mAnimal1Button, 8, 0, 1, 3); + mGridLayout->addItem(mAnimal2Button, 8, 4, 1, 3); + mGridLayout->addItem(mHideButton, 9, 0, 1, 3); + mGridLayout->addItem(mShowButton, 9, 4, 1, 3); + mGridLayout->setRowFixedHeight(0, 300); + setLayout(mGridLayout); + + connect( mRegisterButton, SIGNAL(released()), this, SLOT(regScr()) ); + connect( mUnregisterButton, SIGNAL(released()), this, SLOT(unregScr()) ); + connect( mHideButton, SIGNAL(released()), this, SLOT(hideMe()) ); + connect( mShowButton, SIGNAL(released()), this, SLOT(showMe()) ); + connect( mAnimal1Button, SIGNAL(released()), this, SLOT(animal1()) ); + connect( mAnimal2Button, SIGNAL(released()), this, SLOT(animal2()) ); + connect( mClearButton, SIGNAL(released()), this, SLOT(clear()) ); +} + +lunchwidget::~lunchwidget() +{ + delete mClient; + delete mAnimal1; + delete mAnimal2; +} + +void lunchwidget::regScr() +{ + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + + Before(); + bool ok = mClient->registerScreenshot(screenshot); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::unregScr() +{ + Before(); + bool ok = mClient->unregisterScreenshot(); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::hideMe() +{ + Before(); + bool ok = mClient->setVisibility(false); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::showMe() +{ + Before(); + bool ok = mClient->setVisibility(true); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void lunchwidget::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void lunchwidget::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + +void lunchwidget::animal1() +{ + mPhotoLabel->setIcon(QIcon(*mAnimal1)); +} + +void lunchwidget::animal2() +{ + mPhotoLabel->setIcon(QIcon(*mAnimal2)); +} + +void lunchwidget::clear() +{ + mPhotoLabel->setIcon(QIcon()); + mResultLabel->setPlainText(""); +} + +void lunchwidget::setResult(bool ok) +{ + if ( ok ) { + QString msg; + msg = tr("%1 ms").arg(iResult); + mResultLabel->setPlainText(msg); + } + else { + mResultLabel->setPlainText("Fail"); + } + +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestcatapp/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,77 @@ +/* +* 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: +* +*/ +#ifndef LUNCHWIDGET_H_ +#define LUNCHWIDGET_H_ + +#include +#include +#include +#include +#include + +class HbComboBox; +class TsTaskSettings; + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mRegisterButton; + HbPushButton *mUnregisterButton; + HbPushButton *mHideButton; + HbPushButton *mShowButton; + HbPushButton *mAnimal1Button; + HbPushButton *mAnimal2Button; + HbPushButton *mClearButton; + HbLabel* mPhotoLabel; + HbLabel* mResultLabel; + //HbLabel* mPriorityLabel; + //HbComboBox *mPriorityCombo; + + QPixmap* mAnimal1; + QPixmap* mAnimal2; + + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + +private: + void Before(); + void After(); + void Result(); + void setResult(bool ok); + +private slots: + void regScr(); + void unregScr(); + void hideMe(); + void showMe(); + void animal1(); + void animal2(); + void clear(); + +private: + TsTaskSettings* mClient; +}; + +#endif /* LUNCHWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestcatapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include "lunchwidget.h" + + + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/tstestcatapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestcatapp/tstestcatapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = tstestcatapp + +CONFIG += console +load(hb.prf) +CONFIG -= symbian_i18n + + +SOURCES += main.cpp\ +lunchwidget.cpp + +HEADERS += lunchwidget.h \ + +RESOURCES += tstestcatapp.qrc + +LIBS += -ltstaskmonitorclient.dll + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestcatapp/tstestcatapp.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestcatapp/tstestcatapp.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,6 @@ + + + images/puma.jpg + images/lion.jpg + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/images/bernardyn.jpg Binary file taskswitcher/testapplications/tstestdogapp/images/bernardyn.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/images/newfunland.jpg Binary file taskswitcher/testapplications/tstestdogapp/images/newfunland.jpg has changed diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestdogapp/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,175 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include "tstasksettings.h" + + + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent) +{ + mClient = new TsTaskSettings; + + mAnimal1 = new QPixmap(":/images/bernardyn.jpg"); + mAnimal2 = new QPixmap(":/images/newfunland.jpg"); + + mResultLabel = new HbLabel; + mPhotoLabel= new HbLabel; + // mPriorityLabel = new HbLabel("Priority"); + + mRegisterButton = new HbPushButton("Register"); + mUnregisterButton = new HbPushButton("Unregister"); + mHideButton = new HbPushButton("Hide me"); + mShowButton = new HbPushButton("Show me"); + mAnimal1Button = new HbPushButton("Bernardyn"); + mAnimal2Button = new HbPushButton("Newfunland"); + mClearButton = new HbPushButton("Clear"); + + /*mPriorityCombo = new HbComboBox(); + mPriorityCombo->addItem("default"); + mPriorityCombo->addItem("low"); + mPriorityCombo->addItem("medium"); + mPriorityCombo->addItem("high");*/ + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mPhotoLabel, 0, 0, 6, 6); + mGridLayout->addItem(mResultLabel, 6, 0, 1, 3); + mGridLayout->addItem(mClearButton, 6, 4, 1, 3); + //mGridLayout->addItem(mPriorityLabel, 7, 0, 1, 3); + //mGridLayout->addItem(mPriorityCombo, 7, 4, 1, 3); + mGridLayout->addItem(mRegisterButton, 7, 0, 1, 3); + mGridLayout->addItem(mUnregisterButton, 7, 4, 1, 3); + mGridLayout->addItem(mAnimal1Button, 8, 0, 1, 3); + mGridLayout->addItem(mAnimal2Button, 8, 4, 1, 3); + mGridLayout->addItem(mHideButton, 9, 0, 1, 3); + mGridLayout->addItem(mShowButton, 9, 4, 1, 3); + mGridLayout->setRowFixedHeight(0, 300); + setLayout(mGridLayout); + + connect( mRegisterButton, SIGNAL(released()), this, SLOT(regScr()) ); + connect( mUnregisterButton, SIGNAL(released()), this, SLOT(unregScr()) ); + connect( mHideButton, SIGNAL(released()), this, SLOT(hideMe()) ); + connect( mShowButton, SIGNAL(released()), this, SLOT(showMe()) ); + connect( mAnimal1Button, SIGNAL(released()), this, SLOT(animal1()) ); + connect( mAnimal2Button, SIGNAL(released()), this, SLOT(animal2()) ); + connect( mClearButton, SIGNAL(released()), this, SLOT(clear()) ); +} + +lunchwidget::~lunchwidget() +{ + delete mClient; + delete mAnimal1; + delete mAnimal2; +} + +void lunchwidget::regScr() +{ + HbMainWindow *mainWindow = hbInstance->allMainWindows().first(); + QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect()); + + Before(); + bool ok = mClient->registerScreenshot(screenshot); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::unregScr() +{ + Before(); + bool ok = mClient->unregisterScreenshot(); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::hideMe() +{ + Before(); + bool ok = mClient->setVisibility(false); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::showMe() +{ + Before(); + bool ok = mClient->setVisibility(true); + After(); + Result(); + setResult(ok); +} + +void lunchwidget::Before() +{ + TTime time; + time.HomeTime(); + iBefore = time.Int64(); +} + +void lunchwidget::After() +{ + TTime time; + time.HomeTime(); + iAfter = time.Int64(); +} + +void lunchwidget::Result() +{ + TInt64 res(0); + res = iAfter-iBefore; + res = res/1000; + iResult = res; +} + +void lunchwidget::animal1() +{ + mPhotoLabel->setIcon(QIcon(*mAnimal1)); +} + +void lunchwidget::animal2() +{ + mPhotoLabel->setIcon(QIcon(*mAnimal2)); +} + +void lunchwidget::clear() +{ + mPhotoLabel->setIcon(QIcon()); + mResultLabel->setPlainText(""); +} + +void lunchwidget::setResult(bool ok) +{ + if ( ok ) { + QString msg; + msg = tr("%1 ms").arg(iResult); + mResultLabel->setPlainText(msg); + } + else { + mResultLabel->setPlainText("Fail"); + } + +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestdogapp/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,77 @@ +/* +* 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: +* +*/ +#ifndef LUNCHWIDGET_H_ +#define LUNCHWIDGET_H_ + +#include +#include +#include +#include +#include + +class HbComboBox; +class TsTaskSettings; + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + +private: + + QGraphicsGridLayout *mGridLayout; + HbPushButton *mRegisterButton; + HbPushButton *mUnregisterButton; + HbPushButton *mHideButton; + HbPushButton *mShowButton; + HbPushButton *mAnimal1Button; + HbPushButton *mAnimal2Button; + HbPushButton *mClearButton; + HbLabel* mPhotoLabel; + HbLabel* mResultLabel; + //HbLabel* mPriorityLabel; + //HbComboBox *mPriorityCombo; + + QPixmap* mAnimal1; + QPixmap* mAnimal2; + + TInt64 iBefore; + TInt64 iAfter; + TInt64 iResult; + +private: + void Before(); + void After(); + void Result(); + void setResult(bool ok); + +private slots: + void regScr(); + void unregScr(); + void hideMe(); + void showMe(); + void animal1(); + void animal2(); + void clear(); + +private: + TsTaskSettings* mClient; +}; + +#endif /* LUNCHWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestdogapp/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include "lunchwidget.h" + + + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.show(); + + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/tstestdogapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestdogapp/tstestdogapp.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,37 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = tstestdogapp + +CONFIG += console +load(hb.prf) +CONFIG -= symbian_i18n + + +SOURCES += main.cpp\ +lunchwidget.cpp + +HEADERS += lunchwidget.h \ + +RESOURCES += tstestdogapp.qrc + +LIBS += -ltstaskmonitorclient.dll + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestdogapp/tstestdogapp.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestdogapp/tstestdogapp.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,6 @@ + + + images/bernardyn.jpg + images/newfunland.jpg + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/fakeplugin/data/tsfakelplugin.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/fakeplugin/data/tsfakelplugin.xml Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,11 @@ + + + fakeplugin + fakeplugin + Sample model plugin for Task Switcher + + com.nokia.qt.taskswitcher.dataprovider + 1.0 + test + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/fakeplugin/fakeplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/fakeplugin/fakeplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,57 @@ +# +# 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: +# + +TEMPLATE = lib +TARGET = fakeplugin + +CONFIG += plugin + +CONFIG += mobility +MOBILITY = serviceframework publishsubscribe + +INCLUDEPATH += inc \ + ../inc + +HEADERS += inc/tstestmodelplugin.h \ + inc/tstestmodel.h \ + +SOURCES += src/tstestmodelplugin.cpp \ + src/tstestmodel.cpp \ + +symbian { + load(data_caging_paths) + pluginDep.sources = fakeplugin.dll + pluginDep.path = $$QT_PLUGINS_BASE_DIR + DEPLOYMENT += pluginDep + + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB + + LIBS += -lfbscli + + # service framework XML deployment/export + xml.sources = ./data/tsfakelplugin.xml + xml.path = $$RESOURCE_FILES_DIR/taskswitcher + + DEPLOYMENT += xml + + #temporary workaround + BLD_INF_RULES.prj_exports += "data/tsfakelplugin.xml z:/resource/taskswitcher/tsfakelplugin.xml" +} + +win32 { + DESTDIR = ../app/debug +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/fakeplugin/inc/tstestmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/fakeplugin/inc/tstestmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,74 @@ +/* +* 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: +* +*/ + +#ifndef TSTESTMODEL_H +#define TSTESTMODEL_H + +#include +#include +#include +#include + + +#include +QTM_USE_NAMESPACE + +#if defined(Q_OS_SYMBIAN) + #include +#endif + +class TsTestModel : public QObject +{ + Q_OBJECT + +public: + TsTestModel(QObject *parent = 0); + virtual ~TsTestModel(); + +public slots: + QList taskList() const; + QList taskList(int limit) const; + + bool openTask(const QVariant &id); + bool closeTask(const QVariant &id); + + +private slots: + void verifyConnection(); + void checkValue(); + +signals: + void dataChanged(); + +private: + void removeAll(); + char byte(int numtoget, int byte); + QColor generateColor(int item); + QPixmap generatePixmap(int item); + void addItem(bool running, bool closeable); + void addItems(int num, bool running, bool closeable); + +private: + QList mData; + bool mWasValid; +#if defined(Q_OS_SYMBIAN) + QList mBitmaps; +#endif + QValueSpaceSubscriber mSubscriber; +}; + +#endif // TSTESTMODEL_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/fakeplugin/inc/tstestmodelplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/fakeplugin/inc/tstestmodelplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +/* +* 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: +* +*/ + +#ifndef TSTESTMODELPLUGIN_H +#define TSTESTMODELPLUGIN_H + +#include +#include + +QTM_USE_NAMESPACE + +class TsTestModelPlugin : public QObject, public QServicePluginInterface +{ + Q_OBJECT + Q_INTERFACES(QtMobility::QServicePluginInterface) + +public: + QObject *createInstance(const QServiceInterfaceDescriptor &descriptor, QServiceContext *context, QAbstractSecuritySession *session); + +}; + +#endif // TSTESTMODELPLUGIN_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/fakeplugin/src/tstestmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/fakeplugin/src/tstestmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,207 @@ +/* +* 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 "tstestmodel.h" + +#include +#include +#include +#include +#include "tstestpropertydefs.h" + +TsTestModel::TsTestModel(QObject *parent) : QObject(parent), mWasValid(false) +{ + verifyConnection(); +} + +TsTestModel::~TsTestModel() +{ + qDeleteAll(mBitmaps); + +} + +QList TsTestModel::taskList() const +{ + return mData; +} + +QList TsTestModel::taskList(int limit) const +{ + qDebug()<<"task list"; + return mData.mid(0, limit); +} + +bool TsTestModel::openTask(const QVariant &id) +{ + for (QList::iterator i = mData.begin(); i != mData.end(); ++i) { + if (i->value("TaskId") == id) { + if (!i->value("TaskIsRunning").toBool()) { + i->insert("TaskIsRunning", true); + i->insert("TaskCanBeClosed", true); + } + i->insert("TaskTimestamp", QDateTime::currentDateTime()); + emit dataChanged(); + return true; + } + } + return false; +} + +bool TsTestModel::closeTask(const QVariant &id) +{ + + for(int i=0; ii) { + delete mBitmaps.at(i); + mBitmaps.removeAt(i); + } + } + emit dataChanged(); + return true; + } + } + return false; +} + +void TsTestModel::checkValue() +{ + bool ok; + int value = mSubscriber.value().toInt(&ok); + if (!ok) { + return; + } + if(value == 0) { + return; + } + if(value == -1) { + removeAll(); + return; + } + + int itemnum = byte(value, 0); + if(itemnum == 0) { + return; + } + bool running = byte(value, 1); + bool closeable = byte(value, 2); + addItems(itemnum, running, closeable); + +} + +void TsTestModel::verifyConnection() +{ + mSubscriber.setPath(QString("%1/%2").arg(TsTestProperty::KTsTestPath).arg(TsTestProperty::KPluginPath)); + + if (mSubscriber.value().isValid()) { + if(mWasValid) { + QTimer::singleShot(20000, this, SLOT(verifyConnection())); + return; + } + mWasValid = true; + connect(&mSubscriber, SIGNAL(contentsChanged()), this, SLOT(checkValue())); + // might have missed first value change + checkValue(); + } else { + mWasValid = false; + QTimer::singleShot(3000, this, SLOT(verifyConnection())); + } +} + +void TsTestModel::removeAll() +{ + if(mData.count()>0) { + mData.clear(); + qDeleteAll(mBitmaps); + mBitmaps.clear(); + emit dataChanged(); + } +} + +char TsTestModel::byte(int numtoget, int byte) +{ + char ret = 0; + if(byte>3 || byte<0) { + return ret; + } + numtoget = numtoget>>8*byte; + ret = static_cast(numtoget); + + return ret; + +} + +QColor TsTestModel::generateColor(int item) +{ + int r = item*230%255; + int g = item*80%255; + int b = item*150%255; + + QColor c(r, g, b); + return c; +} + +QPixmap TsTestModel::generatePixmap(int item) +{ + QColor color = generateColor(item); + QPixmap pixmap(128, 128); + pixmap.fill(Qt::transparent); + { + QPainter painter(&pixmap); + painter.setBrush(Qt::white); + painter.setPen(QPen(color, 2)); + QFont font; + font.setPointSize(8); + painter.setFont(font); + QString note; + note = tr("Task %1").arg(item); + painter.drawText(10, 80, note); + } + return pixmap; +} + +void TsTestModel::addItem(bool running, bool closeable) +{ + QVariantHash entry; + int num = mData.count() + 1; + QPixmap pixmap = generatePixmap(num); + CFbsBitmap *bitmap = pixmap.toSymbianCFbsBitmap(); + mBitmaps.append(bitmap); + entry.insert("TaskScreenshot", bitmap->Handle()); + entry.insert("TaskIsRunning", running); + entry.insert("TaskCanBeClosed", closeable); + + entry.insert("TaskId", num); + QString name; + name = tr("Task %1").arg(num); + entry.insert("TaskName", name); + + entry.insert("TaskTimestamp", QDateTime::currentDateTime()); + entry.insert("TaskUid", QString("EB002E%1").arg(num, 2, 10, QChar('0')).toUInt(0, 16)); + + mData.append(entry); +} + +void TsTestModel::addItems(int num, bool running, bool closeable) +{ + for(int i=0; i +#include +#include + +#include "tstestmodel.h" + +QObject *TsTestModelPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, QServiceContext *context, QAbstractSecuritySession *session) +{ + Q_UNUSED(context); + Q_UNUSED(session); + + if (descriptor.interfaceName() == "com.nokia.qt.taskswitcher.dataprovider") { + return new TsTestModel(); + } else { + return NULL; + } +} + +Q_EXPORT_PLUGIN2(tstestmodelplugin, TsTestModelPlugin) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/inc/tstestpropertydefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/inc/tstestpropertydefs.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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: +* +*/ +#ifndef TSTESTPROPERTYDEFS_H +#define TSTESTPROPERTYDEFS_H + +namespace TsTestProperty { + +#if defined(__SYMBIAN32__) || defined(SYMBIAN) + const TUid KCategory = {0xE1f7fe4d}; + const TUint KPluginKey = 0xE1f7fe4d; +#endif + const char KTsTestPath[] = "/TaskSwitcherTest"; + const char KPluginPath[] = "PluginSet"; + +} + +#endif // TSTESTPROPERTYDEFS_H + \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/sis/tstestpluginmanager.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/sis/tstestpluginmanager.pkg Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,41 @@ +; tspluginmanager_template.pkg generated by qmake at 2010-07-08T16:34:25 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + + +; SIS header: name, uid, version +#{"tstestpluginmanager"},(0xE1f7fe4d),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + + +; Manual PKG pre-rules from PRO files +; Default dependency to Qt libraries + +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +; Default dependency to QtMobility libraries +(0x2002AC89), 1, 0, 1, {"QtMobility"} + +; Executable and default resource files +"/epoc32/release/armv5/urel/tspluginmanager.exe" - "!:\sys\bin\tspluginmanager.exe" +"/epoc32/data/z/resource/apps/tspluginmanager.rsc" - "!:\resource\apps\tspluginmanager.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tspluginmanager_reg.rsc" - "!:\private\10003a3f\import\apps\tspluginmanager_reg.rsc" +; DEPLOYMENT +"/epoc32/data/z/resource/qt/crml/tspluginmanager.qcrml" - "!:\resource\qt\crml\tspluginmanager.qcrml" + +"/epoc32/release/armv5/urel/fakeplugin.dll" - "!:\sys\bin\fakeplugin.dll" +"/epoc32/data/z/resource/qt/plugins/fakeplugin.qtplugin" - "!:\resource\qt\plugins\fakeplugin.qtplugin" +"/epoc32/data/z/resource/taskswitcher/tsfakelplugin.xml" - "!:\resource\taskswitcher\tsfakelplugin.xml" +; Manual PKG post-rules from PRO files diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/lunchwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,152 @@ +/* +* 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 "lunchwidget.h" +#include +#include +#include +#include +#include +#include +#include +#include + + +QTM_USE_NAMESPACE + +#define hbApp qobject_cast(qApp) + +lunchwidget::lunchwidget(QGraphicsItem *parent) + : HbWidget(parent), mPluginPublisher(TsTestProperty::KTsTestPath) +{ + mLoadLabel = new HbLabel; + QServiceManager manager; + bool ok = manager.addService(":/tsfakelplugin.xml"); + if (!ok) { + int err = manager.error(); + QString mess; + mess = tr("Load service: %1").arg(err); + mLoadLabel->setPlainText(mess); + } + else { + mLoadLabel->setPlainText("Load service: Ok"); + } + + mTenLabel= new HbLabel("10x"); + mOneLabel= new HbLabel("1x"); + + + mAdd = new HbPushButton("Add"); + mRemove = new HbPushButton("Remove all"); + + + mTenCombo = new HbComboBox(); + mOneCombo = new HbComboBox(); + for (int i=0; i<10; i++) { + QString num; + num.setNum(i); + mTenCombo->addItem(num); + mOneCombo->addItem(num); + } + mRunningCheckBox = new HbCheckBox("Is Running"); + mRunningCheckBox->setCheckState(Qt::Checked); + mCloseableCheckBox = new HbCheckBox("Is Closeable"); + mCloseableCheckBox->setCheckState(Qt::Checked); + + mGridLayout = new QGraphicsGridLayout(); + mGridLayout->addItem(mOneLabel, 0, 0, 1, 3); + mGridLayout->addItem(mTenLabel, 0, 3, 1, 3); + mGridLayout->addItem(mOneCombo, 1, 0, 1, 3); + mGridLayout->addItem(mTenCombo, 1, 3, 1, 3); + mGridLayout->addItem(mRunningCheckBox, 2, 0, 1, 6); + mGridLayout->addItem(mCloseableCheckBox, 3, 0, 1, 6); + mGridLayout->addItem(mAdd, 4, 0, 1, 6); + mGridLayout->addItem(mRemove, 5, 0, 1, 6); + mGridLayout->addItem(mLoadLabel, 6, 0, 1, 6); + setLayout(mGridLayout); + + + connect(mAdd, SIGNAL(released()), this, SLOT(add())); + connect(mRemove, SIGNAL(released()), this, SLOT(remove())); + + + mPluginPublisher.setValue(TsTestProperty::KPluginPath, 0); + mPluginPublisher.sync(); + +} + +lunchwidget::~lunchwidget() +{ + +} + +void lunchwidget::add() +{ + int ten = mTenCombo->currentText().toInt(); + int one = mOneCombo->currentText().toInt(); + int num = ten*10+one; + bool running = false; + bool closeable = false; + if (mRunningCheckBox->checkState() == Qt::Checked) { + running = true; + } + if (mCloseableCheckBox->checkState() == Qt::Checked) { + closeable = true; + } + + int message = 0; + setByte(message, 0, num); + setByte(message, 1, running); + setByte(message, 2, closeable); + + mPluginPublisher.setValue(TsTestProperty::KPluginPath, message); + mPluginPublisher.sync(); +} + +void lunchwidget::remove() +{ + int message = -1; + + mPluginPublisher.setValue(TsTestProperty::KPluginPath, message); + mPluginPublisher.sync(); +} + + +void lunchwidget::setByte(int& numtoset, int byte, char value) +{ + if(byte>3 || byte<0) { + return; + } + int multiple = 255;//0b00000000000000000000000011111111; + unsigned int temp = 0; + temp = temp | value; + temp = temp & multiple; + temp = temp << byte*8; + numtoset = numtoset | temp; +} + +char lunchwidget::byte(int numtoget, int byte) +{ + char ret = 0; + if(byte>3 || byte<0) { + return ret; + } + numtoget = numtoget>>8*byte; + ret = static_cast(numtoget); + + return ret; + +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/lunchwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/lunchwidget.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,64 @@ +/* +* 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: +* +*/ +#ifndef LUNCWIDGET_H_ +#define LUNCWIDGET_H_ + +#include +#include +#include +#include +#include +#include +#include + +QTM_USE_NAMESPACE + +class HbComboBox; +class HbCheckBox; + +class lunchwidget: public HbWidget +{ + Q_OBJECT +public: + lunchwidget(QGraphicsItem *parent = 0); + ~lunchwidget(); + + +private slots: + + void remove(); + void add(); + +private: + void setByte(int& numtoset, int byte, char value); + char byte(int numtoget, int byte); + +private: + HbLabel* mLoadLabel; + HbLabel* mTenLabel; + HbLabel* mOneLabel; + HbComboBox *mTenCombo; + HbComboBox *mOneCombo; + HbCheckBox* mRunningCheckBox; + HbCheckBox* mCloseableCheckBox; + QGraphicsGridLayout *mGridLayout; + HbPushButton *mAdd; + HbPushButton *mRemove; + QValueSpacePublisher mPluginPublisher; +}; + +#endif /* LUNCWIDGET_H_*/ diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/main.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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 +#include +#include +#include "lunchwidget.h" + + +int main(int argc, char **argv) +{ + HbApplication app(argc, argv); + lunchwidget* lw = new lunchwidget; + HbMainWindow mainWindow; + mainWindow.addView( lw ); + mainWindow.currentView()->setTitle("Parent"); + mainWindow.show(); + RProcess::Rendezvous(KErrNone); + return app.exec(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/tspluginmanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/tspluginmanager.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,47 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = tspluginmanager + +CONFIG += console mobility +load(hb.prf) +CONFIG -= symbian_i18n + +MOBILITY = serviceframework publishsubscribe + +INCLUDEPATH += ../inc + +SOURCES += main.cpp\ +lunchwidget.cpp + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +HEADERS += lunchwidget.h +LIBS += -lxqsettingsmanager + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x500000 // 128kB - 5MB + TARGET.CAPABILITY = ALL -TCB + TARGET.UID3 = 0xE1f7fe4d +} + +crml.sources = ./resource/*.qcrml +crml.path = /resource/qt/crml + +DEPLOYMENT += crml + +RESOURCES += tspluginmanager.qrc \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/tspluginmanager.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/tspluginmanager/tspluginmanager.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,5 @@ + + + ../fakeplugin/data/tsfakelplugin.xml + + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/testapplications/tstestpluginmanager/tstestpluginmanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/testapplications/tstestpluginmanager/tstestpluginmanager.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered +SUBDIRS += tspluginmanager +SUBDIRS += fakeplugin diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsdataobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsdataobserver.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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: +* +*/ +#ifndef DATAOBSERVER_H +#define DATAOBSERVER_H + +#include + +class MTsDataObserver { +public: + virtual void DataChanged() =0; +}; + +class CTsDataObserver: public CBase, + public MTsDataObserver +{ +public: + virtual void Cancel(const RMessage2& reason) =0; + virtual TBool IsParent(const CSession2 *session) =0; +}; + +class MTsDataObserverStorage +{ +public: + virtual void PushL(CTsDataObserver*) =0; + virtual void Pop(CTsDataObserver*) =0; + virtual void Cancel(const RMessage2& reason) =0; + virtual void Invalidate(const CSession2* session) =0; +}; + +#endif //DATAOBSERVER_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsentry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsentry.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ + +#ifndef TSENTRY_H +#define TSENTRY_H + +#include +#include +#include + +#include "tsentrykey.h" +#include "tstaskmonitorglobals.h" + +class CTsEntry; +class CFbsBitmap; +class MTsDataObserver; + +typedef RPointerArray RTsFswArray; + +/** + * An entry in the task list. + */ +NONSHARABLE_CLASS( CTsEntry ) : public CBase, + private MImageReadyCallBack +{ +public: + static CTsEntry *NewL(const TTsEntryKey &key, MTsDataObserver &observer); + static CTsEntry *NewLC(const TTsEntryKey &key, MTsDataObserver &observer); + ~CTsEntry(); + +public: + TUid AppUid() const; + const TDesC &AppName() const; + TBool CloseableApp() const; + Visibility GetVisibility() const; + CFbsBitmap *AppIconBitmap() const; + CFbsBitmap *Screenshot() const; + const TTsEntryKey &Key() const; + TTime Timestamp() const; + + void SetAppUid(const TUid &uid); + void SetAppNameL(const TDesC &appName); + void SetCloseableApp(TBool value); + void SetVisibility(Visibility visibility); + void SetAppIcon(CFbsBitmap *aBitmap); + void SetScreenshotL(const CFbsBitmap &bitmap, UpdatePriority priority); + void RemoveScreenshotL(); + void SetTimestamp(const TTime ×tamp); + +private: + CTsEntry(const TTsEntryKey &aKey, MTsDataObserver &observer); + +public: // from MImageReadyCallBack + void ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap); + +private: + TUid mAppUid; + HBufC* mAppName; + TBool mCloseableApp; + Visibility mVisibility; + CFbsBitmap* mAppIconBitmap; + CFbsBitmap* mScreenshot; + TTsEntryKey mKey; + UpdatePriority mPriority; + TTime mTimestamp; + +private: + CTsGraphicFileScalingHandler *mImgTool; + +private: + MTsDataObserver &mObserver; + +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsentrykey.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsentrykey.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2008 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: Task list entry + * +*/ + + +#ifndef TSENTRYKEY_H +#define TSENTRYKEY_H + +#include + +class TTsEntryKey +{ +public: + TTsEntryKey(TInt parentId =0); + TBool operator ==(const TTsEntryKey& key) const; + TInt WindowGroupId() const; + +private: + TInt mParentId; +}; + +#endif //TSENTRYKEY_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsentrykeygenerator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsentrykeygenerator.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2008 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: Task list entry + * +*/ + + +#ifndef TSENTRYKEYGENERATOR_H +#define TSENTRYKEYGENERATOR_H + +#include +#include +#include + +#include "tsentrykey.h" + + +class TsEntryKeyGeneraror +{ +public: + static TInt Generate(TTsEntryKey& returnKey, TInt windowGroupId, + const TArray& groupChain); +}; + +#endif //TSENTRYKEYGENERATOR_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsscreenshotmsg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsscreenshotmsg.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ + +#ifndef TSSCREENSHOTMSG_H +#define TSSCREENSHOTMSG_H +#include +#include +#include "tstaskmonitorglobals.h" +class CFbsBitmap; + +class CTsScreenshotMsg: public CBase +{ +public: + static CTsScreenshotMsg* NewLC(RReadStream&); + static CTsScreenshotMsg* NewLC(TInt windowGroupId, const CFbsBitmap& bitmap, UpdatePriority prior); + + static TInt size(); + ~CTsScreenshotMsg(); + TInt windowGroupId() const; + const CFbsBitmap& screenshot() const; + UpdatePriority priority() const; + HBufC8* ExternalizeLC() const; + void ExternalizeL(RWriteStream &stream) const; + void InternalizeL(RReadStream &stream); + +private: + CTsScreenshotMsg(); + void ConstructL(RReadStream &stream); + void ConstructL(TInt windowGroupId, const CFbsBitmap& bitmap, UpdatePriority prior); + +private: + TInt mWindowGroupId; + UpdatePriority mPriority; + CFbsBitmap* mBitmap; +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsunregscreenshotmsg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsunregscreenshotmsg.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ + +#ifndef TSUNREGISTERSCREENSHOTMSG_H +#define TSUNREGISTERSCREENSHOTMSG_H +#include +#include + +class CTsUnregisterScreenshotMsg: public CBase +{ +public: + static CTsUnregisterScreenshotMsg* NewLC(RReadStream&); + static CTsUnregisterScreenshotMsg* NewLC(TInt windowGroupId); + + static TInt size(); + ~CTsUnregisterScreenshotMsg(); + TInt windowGroupId() const; + HBufC8* ExternalizeLC() const; + void ExternalizeL(RWriteStream &stream) const; + void InternalizeL(RReadStream &stream); + +private: + CTsUnregisterScreenshotMsg(); + void ConstructL(RReadStream &stream); + void ConstructL(TInt windowGroupId); + +private: + TInt mWindowGroupId; +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsutils.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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: +* +*/ + +namespace TaskSwitcher { + template + void RPointerArrayCleanupMethod(TAny *aPtr) + { + static_cast< RPointerArray* >(aPtr)->ResetAndDestroy(); + } + + template + void CleanupResetAndDestroyPushL(RPointerArray &array) { + CleanupStack::PushL(TCleanupItem(&RPointerArrayCleanupMethod, &array)); + } +} \ No newline at end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/inc/tsvisibilitymsg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/inc/tsvisibilitymsg.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ + +#ifndef TSVISIBILITYMSG_H +#define TSVISIBILITYMSG_H +#include +#include + +#include "tstaskmonitorglobals.h" + +class CTsVisibilitMsg: public CBase +{ +public: + static CTsVisibilitMsg* NewLC(RReadStream&); + static CTsVisibilitMsg* NewLC(TInt windowGroupId, Visibility visi); + + static TInt size(); + ~CTsVisibilitMsg(); + TInt windowGroupId() const; + Visibility visibility() const; + HBufC8* ExternalizeLC() const; + void ExternalizeL(RWriteStream &stream) const; + void InternalizeL(RReadStream &stream); + +private: + CTsVisibilitMsg(); + void ConstructL(RReadStream &stream); + void ConstructL(TInt windowGroupId, Visibility visi); + +private: + TInt mWindowGroupId; + Visibility mVisibility; +}; + +#endif diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/src/tsentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/src/tsentry.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2008 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: Task list entry + * + */ + +#define __E32SVR_H__ +#include +#include +#include "tsentry.h" +#include "tsdataobserver.h" + +// -------------------------------------------------------------------------- +// CTsFswEntry::NewL +// -------------------------------------------------------------------------- +// +CTsEntry* CTsEntry::NewL(const TTsEntryKey &key, MTsDataObserver &observer) +{ + CTsEntry* self = NewLC(key, observer); + CleanupStack::Pop(self); + return self; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::NewLC +// -------------------------------------------------------------------------- +// +CTsEntry* CTsEntry::NewLC(const TTsEntryKey &key, MTsDataObserver &observer) +{ + CTsEntry* self = new (ELeave) CTsEntry(key, observer); + CleanupStack::PushL(self); + return self; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::~CTsFswEntry +// -------------------------------------------------------------------------- +// +CTsEntry::~CTsEntry() +{ + delete mAppName; + delete mAppIconBitmap; + delete mScreenshot; + delete mImgTool; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::CTsFswEntry +// -------------------------------------------------------------------------- +// +CTsEntry::CTsEntry(const TTsEntryKey &key, MTsDataObserver &observer) +: + mVisibility(Visible), + mKey(key), + mPriority(Low), + mObserver(observer) +{ +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::SetAppUid +// -------------------------------------------------------------------------- +// +void CTsEntry::SetAppUid(const TUid &uid) +{ + mAppUid = uid; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::SetAppNameL +// -------------------------------------------------------------------------- +// +void CTsEntry::SetAppNameL(const TDesC &appName) +{ + delete mAppName; + mAppName = 0; + mAppName = appName.AllocL(); +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::SetSystemApp +// -------------------------------------------------------------------------- +// +void CTsEntry::SetCloseableApp(TBool value) +{ + mCloseableApp = value; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::SetAppIconHandles +// -------------------------------------------------------------------------- +// +void CTsEntry::SetAppIcon(CFbsBitmap * bitmap) +{ + mAppIconBitmap = bitmap; +} + +// -------------------------------------------------------------------------- +/** + * Application uid. + */ +TUid CTsEntry::AppUid() const +{ + return mAppUid; +} + +// -------------------------------------------------------------------------- +/** + * Application name. + */ +const TDesC& CTsEntry::AppName() const +{ + return mAppName ? *mAppName : KNullDesC(); +} + +// -------------------------------------------------------------------------- +/** + * Retrieve entry visibilit status + */ +Visibility CTsEntry::GetVisibility() const +{ + return mVisibility; +} + +// -------------------------------------------------------------------------- +/** + * Change entry visibility status + * @param visibility - new visibility status + */ +void CTsEntry::SetVisibility(Visibility visibility) +{ + mVisibility = visibility; +} + +// -------------------------------------------------------------------------- +/** + * ETrue if the application is closeable + */ +TBool CTsEntry::CloseableApp() const +{ + return mCloseableApp; +} + +// -------------------------------------------------------------------------- +/** + * Application icon bitmap + */ +CFbsBitmap *CTsEntry::AppIconBitmap() const +{ + return mAppIconBitmap; +} + +// -------------------------------------------------------------------------- +/** + * Entry's key + */ +const TTsEntryKey &CTsEntry::Key() const +{ + return mKey; +} + +TTime CTsEntry::Timestamp() const +{ + return mTimestamp; +} + +void CTsEntry::SetTimestamp(const TTime ×tamp) +{ + mTimestamp = timestamp; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::SetScreenshot +// -------------------------------------------------------------------------- +// +void CTsEntry::SetScreenshotL(const CFbsBitmap &bitmapArg, UpdatePriority priority) +{ + TInt currentPriority = static_cast (mPriority); + TInt newPriority = static_cast (priority); + if(newPriority Duplicate(bitmapArg.Handle())); + CleanupStack::Pop(bitmap); + + mPriority = priority; + delete mScreenshot; + mScreenshot = bitmap; + + delete mImgTool; + mImgTool = 0; + + mImgTool = CTsGraphicFileScalingHandler::NewL(*this, *mScreenshot, TSize(128, 128), + CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding); +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::RemoveScreenshot +// -------------------------------------------------------------------------- +// +void CTsEntry::RemoveScreenshotL() +{ + if (!mScreenshot) { + User::Leave(KErrNotFound); + } + delete mScreenshot; + mScreenshot = NULL; + mPriority = Low; + + mObserver.DataChanged(); +} + +// -------------------------------------------------------------------------- +/** + * Application screenshot. + */ +CFbsBitmap* CTsEntry::Screenshot() const +{ + return mScreenshot; +} + +// -------------------------------------------------------------------------- +// CTsFswEntry::Priority +// -------------------------------------------------------------------------- +// +void CTsEntry::ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap) +{ + if (KErrNone == error && 0 != bitmap) { + mScreenshot->Reset(); + mScreenshot->Duplicate(bitmap->Handle()); + + mObserver.DataChanged(); + } +} + +// end of file diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/src/tsentrykey.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/src/tsentrykey.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2008 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: Task list entry + * +*/ + + +#include "tsentrykey.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TTsEntryKey::TTsEntryKey(TInt parentId) +: + mParentId(parentId) +{} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TTsEntryKey::operator ==(const TTsEntryKey& key) const +{ + return (mParentId == key.mParentId); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt TTsEntryKey::WindowGroupId() const +{ + return mParentId; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/src/tsentrykeygenerator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/src/tsentrykeygenerator.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2008 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: Task list entry + * +*/ +#include "tsentrykeygenerator.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt TsEntryKeyGeneraror::Generate(TTsEntryKey& returnKey, TInt windowGroupId, + const TArray& groupChain) +{ + for (TInt iter(0); iter < groupChain.Count(); ++iter) { + if (groupChain[iter].iId == windowGroupId) { + returnKey = TTsEntryKey(windowGroupId); + if (groupChain[iter].iId == groupChain[iter].iParentId) { + return KErrBadHandle; + } + else if (0 >= groupChain[iter].iParentId) { + return KErrNone; + } + else { + return TsEntryKeyGeneraror::Generate(returnKey, groupChain[iter].iParentId, groupChain); + } + } + } + return KErrNotFound; +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/src/tsscreenshotmsg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/src/tsscreenshotmsg.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ +#include +#include + +#include "tsscreenshotmsg.h" + +// ----------------------------------------------------------------------------- +CTsScreenshotMsg* CTsScreenshotMsg::NewLC(RReadStream& stream) +{ + CTsScreenshotMsg *self = new(ELeave)CTsScreenshotMsg(); + CleanupStack::PushL(self); + self->ConstructL(stream); + return self; +} +// ----------------------------------------------------------------------------- +CTsScreenshotMsg* CTsScreenshotMsg::NewLC(TInt windowGroupId, const CFbsBitmap& bitmap, UpdatePriority prior) +{ + CTsScreenshotMsg *self = new(ELeave)CTsScreenshotMsg(); + CleanupStack::PushL(self); + self->ConstructL(windowGroupId, bitmap, prior); + return self; +} +// ----------------------------------------------------------------------------- +TInt CTsScreenshotMsg::CTsScreenshotMsg::size() +{ + return sizeof(TInt) * 3; +} +// ----------------------------------------------------------------------------- +CTsScreenshotMsg::~CTsScreenshotMsg() +{ + delete mBitmap; +} + +// ----------------------------------------------------------------------------- +TInt CTsScreenshotMsg::windowGroupId() const +{ + return mWindowGroupId; +} + +// ----------------------------------------------------------------------------- +const CFbsBitmap& CTsScreenshotMsg::screenshot() const +{ + return *mBitmap; +} + +// ----------------------------------------------------------------------------- +UpdatePriority CTsScreenshotMsg::priority() const +{ + return mPriority; +} + +// ----------------------------------------------------------------------------- +HBufC8* CTsScreenshotMsg::ExternalizeLC() const +{ + HBufC8* retVal = HBufC8::NewLC(size()); + TPtr8 des(retVal->Des()); + RDesWriteStream stream(des); + CleanupClosePushL(stream); + stream << (*this); + CleanupStack::PopAndDestroy(&stream); + return retVal; +} + +// ----------------------------------------------------------------------------- +void CTsScreenshotMsg::ExternalizeL(RWriteStream &stream) const +{ + stream.WriteInt32L(mWindowGroupId); + stream.WriteInt32L(mBitmap->Handle()); + stream.WriteInt32L(mPriority); +} +// ----------------------------------------------------------------------------- +void CTsScreenshotMsg::InternalizeL(RReadStream &stream) +{ + mWindowGroupId = stream.ReadInt32L(); + User::LeaveIfError(mBitmap->Duplicate(stream.ReadInt32L())); + mPriority = static_cast(stream.ReadInt32L()); +} + +// ----------------------------------------------------------------------------- +CTsScreenshotMsg::CTsScreenshotMsg() +{} +// ----------------------------------------------------------------------------- +void CTsScreenshotMsg::ConstructL(RReadStream &stream) +{ + mBitmap = new(ELeave)CFbsBitmap(); + stream >> (*this); +} + +// ----------------------------------------------------------------------------- +void CTsScreenshotMsg::ConstructL(TInt windowGroupId, const CFbsBitmap& bitmap, UpdatePriority prior) +{ + mBitmap = new(ELeave)CFbsBitmap(); + User::LeaveIfError(mBitmap->Duplicate(bitmap.Handle())); + mWindowGroupId = windowGroupId; + mPriority = prior; +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/src/tsunregscreenshotmsg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/src/tsunregscreenshotmsg.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ +#include "tsunregscreenshotmsg.h" +#include +// ----------------------------------------------------------------------------- +CTsUnregisterScreenshotMsg* CTsUnregisterScreenshotMsg::NewLC(RReadStream& stream) +{ + CTsUnregisterScreenshotMsg* self = new(ELeave)CTsUnregisterScreenshotMsg(); + CleanupStack::PushL(self); + self->ConstructL(stream); + return self; +} + +// ----------------------------------------------------------------------------- +CTsUnregisterScreenshotMsg* CTsUnregisterScreenshotMsg::NewLC(TInt windowGroupId) +{ + CTsUnregisterScreenshotMsg* self = new(ELeave)CTsUnregisterScreenshotMsg(); + CleanupStack::PushL(self); + self->ConstructL(windowGroupId); + return self; +} + +// ----------------------------------------------------------------------------- +CTsUnregisterScreenshotMsg::CTsUnregisterScreenshotMsg() +{ + //No implementation required +} +// ----------------------------------------------------------------------------- +void CTsUnregisterScreenshotMsg::ConstructL(RReadStream &stream) +{ + stream >> (*this); +} + +// ----------------------------------------------------------------------------- +void CTsUnregisterScreenshotMsg::ConstructL(TInt windowGroupId) +{ + mWindowGroupId = windowGroupId; +} + +// ----------------------------------------------------------------------------- +TInt CTsUnregisterScreenshotMsg::size() +{ + return sizeof(TInt); +} + +// ----------------------------------------------------------------------------- +CTsUnregisterScreenshotMsg::~CTsUnregisterScreenshotMsg() +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +TInt CTsUnregisterScreenshotMsg::windowGroupId() const +{ + return mWindowGroupId; +} + +// ----------------------------------------------------------------------------- +HBufC8* CTsUnregisterScreenshotMsg::ExternalizeLC() const +{ + HBufC8* retVal = HBufC8::NewLC(size()); + TPtr8 des(retVal->Des()); + RDesWriteStream stream(des); + CleanupClosePushL(stream); + stream << (*this); + CleanupStack::PopAndDestroy(&stream); + return retVal; +} + +// ----------------------------------------------------------------------------- +void CTsUnregisterScreenshotMsg::ExternalizeL(RWriteStream &stream) const +{ + stream.WriteInt32L(mWindowGroupId); +} + +// ----------------------------------------------------------------------------- +void CTsUnregisterScreenshotMsg::InternalizeL(RReadStream &stream) +{ + mWindowGroupId = stream.ReadInt32L(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/src/tsvisibilitymsg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/src/tsvisibilitymsg.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2008 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: Task list entry +* +*/ +#include +#include "tsvisibilitymsg.h" +// ----------------------------------------------------------------------------- +CTsVisibilitMsg* CTsVisibilitMsg::NewLC(RReadStream& stream) +{ + CTsVisibilitMsg *self = new (ELeave)CTsVisibilitMsg(); + CleanupStack::PushL(self); + self->ConstructL(stream); + return self; +} + +// ----------------------------------------------------------------------------- +CTsVisibilitMsg* CTsVisibilitMsg::NewLC(TInt windowGroupId, Visibility visi) +{ + CTsVisibilitMsg *self = new (ELeave)CTsVisibilitMsg(); + CleanupStack::PushL(self); + self->ConstructL(windowGroupId, visi); + return self; +} +// ----------------------------------------------------------------------------- +TInt CTsVisibilitMsg::size() +{ + return sizeof(TInt) * 2; +} + +// ----------------------------------------------------------------------------- +CTsVisibilitMsg::~CTsVisibilitMsg() +{ + //No implementation required +} + +// ----------------------------------------------------------------------------- +TInt CTsVisibilitMsg::windowGroupId() const +{ + return mWindowGroupId; +} + +// ----------------------------------------------------------------------------- +Visibility CTsVisibilitMsg::visibility() const +{ + return mVisibility; +} + +// ----------------------------------------------------------------------------- +HBufC8* CTsVisibilitMsg::ExternalizeLC() const +{ + HBufC8* retVal = HBufC8::NewLC(size()); + TPtr8 des(retVal->Des()); + RDesWriteStream stream(des); + CleanupClosePushL(stream); + stream << (*this); + CleanupStack::PopAndDestroy(&stream); + return retVal; +} + +// ----------------------------------------------------------------------------- +void CTsVisibilitMsg::ExternalizeL(RWriteStream &stream) const +{ + stream.WriteInt32L(mWindowGroupId); + stream.WriteInt32L(mVisibility); + +} + +// ----------------------------------------------------------------------------- +void CTsVisibilitMsg::InternalizeL(RReadStream &stream) +{ + mWindowGroupId = stream.ReadInt32L(); + mVisibility = static_cast(stream.ReadInt32L()); +} + +// ----------------------------------------------------------------------------- +CTsVisibilitMsg::CTsVisibilitMsg() +{ + //No implementaton required +} + +// ----------------------------------------------------------------------------- +void CTsVisibilitMsg::ConstructL(RReadStream &stream) +{ + stream >> (*this); +} + +// ----------------------------------------------------------------------------- +void CTsVisibilitMsg::ConstructL(TInt windowGroupId, Visibility visi) +{ + mWindowGroupId = windowGroupId; + mVisibility = visi; +} + diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/tsrc/t_tsentrykeyhandling/t_tsentrykeyhandling.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/tsrc/t_tsentrykeyhandling/t_tsentrykeyhandling.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,75 @@ +/* +* 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 + +#include "t_tsentrykeyhandling.h" +#include "tsentrykey.h" +#include "tsentrykeygenerator.h" +void T_TsEntryKeyHandling::testKeyGeneration() +{ + int errNo, iter; + const int rootWindowGroupId(1); + const int embApps(30); + + RWsSession::TWindowGroupChainInfo item; + RArray items(embApps); + + //generate root window + item.iId = rootWindowGroupId; + item.iParentId = -1; + items.Append(item); + + //add some embedded windows + for (iter = rootWindowGroupId; iter < rootWindowGroupId + embApps;) { + item.iParentId = iter; + item.iId = ++iter; + items.Append(item); + } + TTsEntryKey root; + errNo = TsEntryKeyGeneraror::Generate(root, rootWindowGroupId, items.Array()); + QCOMPARE(errNo, KErrNone); + + TTsEntryKey key; + for (iter = 0; iter < items.Count(); ++iter) { + errNo = TsEntryKeyGeneraror::Generate(key, items[iter].iId, + items.Array()); + QCOMPARE(errNo, KErrNone); + QCOMPARE(key, root); + } + + //bad handle + items.Reset(); + item.iId = rootWindowGroupId; + item.iParentId = rootWindowGroupId; + items.Append(item); + TTsEntryKey bad; + errNo = TsEntryKeyGeneraror::Generate(bad, rootWindowGroupId, items.Array()); + QCOMPARE(errNo, KErrBadHandle); + + //not found + items.Reset(); + item.iId = rootWindowGroupId; + item.iParentId = rootWindowGroupId; + items.Append(item); + TTsEntryKey notFound; + errNo = TsEntryKeyGeneraror::Generate(notFound, 15002900, items.Array()); + QCOMPARE(errNo, KErrNotFound); + + +} + +QTEST_MAIN(T_TsEntryKeyHandling) diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/tsrc/t_tsentrykeyhandling/t_tsentrykeyhandling.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/tsrc/t_tsentrykeyhandling/t_tsentrykeyhandling.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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: +* +*/ +#ifndef T_TSENTRYKEYHANDLING_H +#define T_TSENTRYKEYHANDLING_H + +#include + +/** +* @test Test class for TsTaskMonitorClient +*/ +class T_TsEntryKeyHandling : public QObject +{ + Q_OBJECT +private slots: + void testKeyGeneration(); + +}; + +#endif //T_TSENTRYKEYHANDLING_H diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/tsrc/t_tsentrykeyhandling/t_tsentrykeyhandling.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/tsrc/t_tsentrykeyhandling/t_tsentrykeyhandling.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +# +# 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: +# + +TEMPLATE = app + +QT *= testlib +CONFIG += console + +INCLUDEPATH += . \ + ../../inc/ + +HEADERS += t_tsentrykeyhandling.h \ + +SOURCES += t_tsentrykeyhandling.cpp \ + ../../src/tsentrykey.cpp \ + ../../src/tsentrykeygenerator.cpp + +LIBS += -lestor.dll + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA=1 +} + +coverage { + DEFINES += COVERAGE_MEASUREMENT + DEFINES += QT_NO_DEBUG # omit ASSERTS in coverage measurements +} diff -r 3ab5c078b490 -r c63ee96dbe5f taskswitcher/utils/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/utils/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,20 @@ +# +# 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: +# + +TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS += t_tsentrykeyhandling diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/afmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/afmanager.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,69 @@ +/* +* 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 "afmanager.h" +#include + +const char myName [] = "TestActivityManager"; + +AfManager::AfManager(QObject *parent) : QObject(parent) +{ + setObjectName(myName); + mData = QList(); +} + +AfManager::~AfManager() +{ +} + +QList AfManager::activitiesList() +{ + return mData; +} + +void AfManager::setActivitiesList(const QList& activities) +{ + mData = activities; +} + +void AfManager::launchActivity(const QString &uri) +{ + Q_UNUSED(uri); +} + +void AfManager::launchActivity(int applicationId, const QString &activityId) +{ + Q_UNUSED(applicationId); + Q_UNUSED(activityId); +} + +void AfManager::getThumbnail(QSize resolution, const QString &thumbnailId, void *userData) +{ + Q_UNUSED(thumbnailId); + Q_UNUSED(resolution); + emit thumbnailReady(QPixmap(), userData); +} + +void AfManager::emitDataChanged() +{ + emit dataChanged(); +} + +void AfManager::clearActivities() +{ + mData.clear(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/afmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/afmanager.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ +#ifndef AFMANAGER_H +#define AFMANAGER_H + +#include +#include +#include +#include + +class AfManager : public QObject +{ + + Q_OBJECT + +public: + AfManager(QObject *parent = 0); + ~AfManager(); + +public slots: + QList activitiesList(); + void launchActivity(const QString &uri); + void launchActivity(int applicationId, const QString &activityId); + void setActivitiesList(const QList&); + void getThumbnail(QSize resolution, const QString &thumbnailId, void * =0); + void emitDataChanged(); + void clearActivities(); + +signals: + void thumbnailReady(QPixmap, void *); + void dataChanged(); + +private: + QList mData; +}; + +#endif // AFMANAGER_H diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstask.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,58 @@ +/* +* 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 "mocktstask.h" + +TsTaskContent::TsTaskContent(const QString &name, bool closable, bool active) : mName(name), mClosable(closable), mActive(active) +{ +} + +TsTask::TsTask(TsTaskContent *content, TsTaskLauncher &launcher) : mContent(content), mLauncher(launcher) +{ +} + +TsTask::~TsTask() +{ + delete mContent; +} + +bool TsTask::isClosable() const +{ + return mContent->mClosable; +} + +bool TsTask::isActive() const +{ + return mContent->mActive; +} + +QPixmap TsTask::screenshot() const +{ + return QPixmap(); +} + +QString TsTask::name() const +{ + return mContent->mName; +} + +void TsTask::open() +{ +} + +void TsTask::close() +{ +} diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstask.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstask.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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: +* +*/ +#ifndef MOCK_TSTASK_H +#define MOCK_TSTASK_H + +#include +#include +#include + +class TsTaskContent +{ +public: + TsTaskContent(const QString &name, bool closable, bool active); + +public: + QString mName; + bool mClosable; + bool mActive; +}; + +class TsTaskLauncher +{ +}; + +#endif //MOCK_TSTASK_H diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstaskmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstaskmonitor.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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 "mocktstaskmonitor.h" + +TsTaskMonitor::TsTaskMonitor(QObject* parent) +: + QObject(parent) +{ +} + +TsTaskMonitor::~TsTaskMonitor() +{} + +QList TsTaskMonitor::changeList(bool /*fullList*/) +{ + void* ptr(this); + return static_cast(ptr)->mTasks; +} + +MockTsTaskMonitor::MockTsTaskMonitor(QObject *parent) +: + TsTaskMonitor(parent) +{ + mTasks = QList(); +} + +MockTsTaskMonitor::~MockTsTaskMonitor() +{} + +void MockTsTaskMonitor::setTaskList(QList tasks) +{ + mTasks = tasks; + emit taskListChanged(); +} + +void MockTsTaskMonitor::clearTasks() +{ + mTasks.clear(); +} diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstaskmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/mocks/mocktstaskmonitor.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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: +* +*/ +#ifndef MOCKTSTASKMONITOR_H +#define MOCKTSTASKMONITOR_H + +#include +#include +#include +#include +#include + +#include "tstaskchangeinfo.h" + +class MockTsTaskMonitor : public TsTaskMonitor +{ + Q_OBJECT + +public: + MockTsTaskMonitor(QObject *parent = 0); + ~MockTsTaskMonitor(); +public slots: + void setTaskList(QList tasks); + void clearTasks(); + +public: + QList mTasks; +}; + +#endif //MOCKTSTASKMONITOR_H + diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin/t_tsdevicedialogplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin/t_tsdevicedialogplugin.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,158 @@ +/* +* 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_tsdevicedialogplugin.h" + +#include +#include + +#include +#include +QTM_USE_NAMESPACE + +#include +#include + +#include "tsdevicedialogplugin.h" + +void T_TsDeviceDialogPlugin::testCreation() +{ + TsDeviceDialogPlugin *deviceDialogPlugin = new TsDeviceDialogPlugin; + delete deviceDialogPlugin; +} + +void T_TsDeviceDialogPlugin::testAccessAllowed() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + QVERIFY(deviceDialogPlugin.accessAllowed(QString(), QVariantMap(), QVariantMap())); +} + +void T_TsDeviceDialogPlugin::testDialogInfo() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + + HbDeviceDialogPlugin::DeviceDialogInfo info; + deviceDialogPlugin.deviceDialogInfo(QString(), QVariantMap(), &info); + QVERIFY(info.group == HbDeviceDialogPlugin::GenericDeviceDialogGroup); + QVERIFY(info.flags == HbDeviceDialogPlugin::SingleInstance); + QVERIFY(info.priority == HbDeviceDialogPlugin::DefaultPriority); +} + +void T_TsDeviceDialogPlugin::testDialogTypes() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + + QStringList dialogTypes = deviceDialogPlugin.deviceDialogTypes(); + QCOMPARE(1, dialogTypes.count()); + QCOMPARE(QString("com.nokia.taskswitcher.tsdevicedialogplugin/1.0"), dialogTypes.first()); +} + +void T_TsDeviceDialogPlugin::testPluginFlags() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + + QVERIFY(deviceDialogPlugin.pluginFlags() & HbDeviceDialogPlugin::PreloadPlugin); + QVERIFY(deviceDialogPlugin.pluginFlags() & HbDeviceDialogPlugin::KeepPluginLoaded); +} + +void T_TsDeviceDialogPlugin::testError() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + QCOMPARE(0, deviceDialogPlugin.error()); +} + +void T_TsDeviceDialogPlugin::testCreateDialog() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + QVERIFY(!deviceDialogPlugin.createDeviceDialog("InvalidDialogType", QVariantMap())); + foreach(const QString &dialogType, deviceDialogPlugin.deviceDialogTypes()) { + HbDeviceDialogInterface *dialog = deviceDialogPlugin.createDeviceDialog(dialogType, QVariantMap()); + QVERIFY(dialog); + QVERIFY(0 != dialog->deviceDialogWidget()); + QVERIFY(false == dialog->setDeviceDialogParameters(QVariantMap())); + dialog->closeDeviceDialog(true); + QVERIFY(0 == dialog->deviceDialogError()); + delete dialog; + } +} + +void T_TsDeviceDialogPlugin::testNoCrashOnOrientationChange() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + HbDeviceDialogInterface *dialog = deviceDialogPlugin.createDeviceDialog(deviceDialogPlugin.deviceDialogTypes().first(), QVariantMap()); + QVERIFY(dialog); + mMainWindow.setOrientation(Qt::Vertical); + QCoreApplication::processEvents(); + mMainWindow.setOrientation(Qt::Horizontal); + QCoreApplication::processEvents(); + delete dialog; +} + +void T_TsDeviceDialogPlugin::testCreateDeviceDialogTwoTimes() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + HbDeviceDialogInterface *dialog1 = deviceDialogPlugin.createDeviceDialog(deviceDialogPlugin.deviceDialogTypes().first(), QVariantMap()); + QVERIFY(dialog1); + HbDeviceDialogInterface *dialog2 = deviceDialogPlugin.createDeviceDialog(deviceDialogPlugin.deviceDialogTypes().first(), QVariantMap()); + QVERIFY(dialog2); + + delete dialog1; + delete dialog2; +} + +void T_TsDeviceDialogPlugin::testCorrectSignalSenderIsReturned() +{ + TsDeviceDialogPlugin deviceDialogPlugin; + HbDeviceDialogInterface *dialog = deviceDialogPlugin.createDeviceDialog(deviceDialogPlugin.deviceDialogTypes().first(), QVariantMap()); + QVERIFY(dialog); + QVERIFY(dialog->signalSender()); +} + +void T_TsDeviceDialogPlugin::testDialogSendsItsStatusNotifications() +{ + QString tsVisibilityPath = QString("%1/%2").arg(TsProperty::KTsPath).arg(TsProperty::KVisibilityPath); + + TsDeviceDialogPlugin deviceDialogPlugin; + HbDeviceDialogInterface *dialog = deviceDialogPlugin.createDeviceDialog(deviceDialogPlugin.deviceDialogTypes().first(), QVariantMap()); + QVERIFY(dialog); + QCOMPARE(QValueSpaceSubscriber(tsVisibilityPath).value().toBool(), true); + + dialog->closeDeviceDialog(true); + QCOMPARE(QValueSpaceSubscriber(tsVisibilityPath).value().toBool(), false); + + delete dialog; +} + +void T_TsDeviceDialogPlugin::testDialogCanBeDismissedThroughProperty() +{ + QString tsDismissRequestPath = QString("%1/%2").arg(TsProperty::KTsPath).arg(TsProperty::KDismissRequestPath); + + TsDeviceDialogPlugin deviceDialogPlugin; + HbDeviceDialogInterface *dialog = deviceDialogPlugin.createDeviceDialog(deviceDialogPlugin.deviceDialogTypes().first(), QVariantMap()); + QVERIFY(dialog); + QCOMPARE(QValueSpaceSubscriber(tsDismissRequestPath).value().toBool(), false); + + QValueSpacePublisher dismissRequestPublisher(TsProperty::KTsPath); + dismissRequestPublisher.setValue(TsProperty::KDismissRequestPath, static_cast(true)); + dismissRequestPublisher.sync(); + + QVERIFY(TsTestUtils::waitForSignal(dialog->signalSender(), SIGNAL(deviceDialogClosed()), 3000)); + + delete dialog; +} + +QTEST_MAIN(T_TsDeviceDialogPlugin) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin/t_tsdevicedialogplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin/t_tsdevicedialogplugin.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,50 @@ +/* +* 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: +* +*/ +#ifndef T_TSDEVICEDIALOGPLUGIN_H +#define T_TSDEVICEDIALOGPLUGIN_H + +#include + +#include + +/** +* @test Test class for TsDeviceDialogPlugin +*/ +class T_TsDeviceDialogPlugin : public QObject +{ + Q_OBJECT + +private slots: + void testCreation(); + void testAccessAllowed(); + void testDialogInfo(); + void testDialogTypes(); + void testPluginFlags(); + void testError(); + void testCreateDialog(); + void testNoCrashOnOrientationChange(); + void testCreateDeviceDialogTwoTimes(); + void testCorrectSignalSenderIsReturned(); + void testDialogSendsItsStatusNotifications(); + void testDialogCanBeDismissedThroughProperty(); + +private: + HbMainWindow mMainWindow; + +}; + +#endif //T_TSDEVICEDIALOGPLUGIN_H diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin/t_tsdevicedialogplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin/t_tsdevicedialogplugin.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,73 @@ +# +# 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: +# + +TEMPLATE = app +CONFIG += hb testcase mobility +MOBILITY = serviceframework publishsubscribe + +INCLUDEPATH += . \ + ../mocks \ + ../../inc \ + ../../../../inc \ + +HEADERS += t_tsdevicedialogplugin.h \ + ../mocks/afmanager.h \ + ../../inc/tsdevicedialogplugin.h \ + ../../inc/tsdocumentloader.h \ + ../../inc/tstasksgrid.h \ + ../../inc/tsdevicedialogcontainer.h \ + ../../inc/tstasksgriditem.h \ + ../../inc/tsmodel.h \ + ../../inc/tsmodelitem.h \ + ../../inc/tsentrymodelitem.h \ + ../../inc/tsactivitymodelitem.h \ + ../../inc/tsnoitemslabel.h \ + +SOURCES += t_tsdevicedialogplugin.cpp \ + ../mocks/afmanager.cpp \ + ../../src/tsdevicedialogplugin.cpp \ + ../../src/tsdocumentloader.cpp \ + ../../src/tstasksgrid.cpp \ + ../../src/tsdevicedialogcontainer.cpp \ + ../../src/tstasksgriditem.cpp \ + ../../src/tsmodel.cpp \ + ../../src/tsentrymodelitem.cpp \ + ../../src/tsactivitymodelitem.cpp \ + ../../src/tsnoitemslabel.cpp \ + +RESOURCES += ../../tsdevicedialogplugin.qrc + +LIBS += -ltstaskmonitorclient + +symbian { + CONFIG += symbian_test + LIBS += -lxqsettingsmanager \ + -lapgrfx \ # for RApaLsSession + -lapparc \ # for TApaAppInfo + + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + MMP_RULES += "$${LITERAL_HASH}if defined(WINSCW)" \ + "SECUREID 0x20022FC5" \ + "$${LITERAL_HASH}endif" +} + +INCLUDEPATH += ../../../../internal/tstestutils/inc +LIBS += -ltstestutils + +include(../../../common.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/resource/test.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/resource/test.docml Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,7 @@ + + + + + + + diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,67 @@ +/* +* 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_tsdocumentloader.h" + +#include +#include + +#include "tsdocumentloader.h" + +void T_TsDocumentLoader::initTestCase() +{ + mDocumentLoader = new TsDocumentLoader(); + bool ok(false); + mDocumentLoader->load(":/resource/test.docml", &ok); + QVERIFY(ok); +} + +void T_TsDocumentLoader::cleanupTestCase() +{ + delete mDocumentLoader; + mDocumentLoader = NULL; +} + +void T_TsDocumentLoader::taskGridIsCreated() +{ + QGraphicsWidget *grid = mDocumentLoader->findWidget("grid"); + QVERIFY(grid); + QCOMPARE(grid->metaObject()->className(), "TsTasksGrid"); +} + +void T_TsDocumentLoader::taskSwitcherGridItemIsCreated() +{ + QGraphicsWidget *item = mDocumentLoader->findWidget("item"); + QVERIFY(item); + QCOMPARE(item->metaObject()->className(), "TsTasksGridItem"); +} + +void T_TsDocumentLoader::noItemsLabelIsCreated() +{ + QGraphicsWidget *noItemsLabel = mDocumentLoader->findWidget("noitemslabel"); + QVERIFY(noItemsLabel); + QCOMPARE(noItemsLabel->metaObject()->className(), "TsNoItemsLabel"); +} + +void T_TsDocumentLoader::baseClassIsUsedForOtherTypes() +{ + QGraphicsWidget *hbwidget = mDocumentLoader->findWidget("hbwidget"); + QVERIFY(hbwidget); + QCOMPARE(hbwidget->metaObject()->className(), "HbWidget"); +} + +QTEST_MAIN(T_TsDocumentLoader) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,46 @@ +/* +* 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: +* +*/ +#ifndef T_TSDOCUMENTLOADER_H +#define T_TSDOCUMENTLOADER_H + +#include + +class TsDocumentLoader; + +/** +* @test Test class for TsDocumentLoader +*/ +class T_TsDocumentLoader : public QObject +{ + Q_OBJECT + +private slots: + void taskGridIsCreated(); + void taskSwitcherGridItemIsCreated(); + void noItemsLabelIsCreated(); + void baseClassIsUsedForOtherTypes(); + +private slots: + void initTestCase(); + void cleanupTestCase(); + +private: + TsDocumentLoader *mDocumentLoader; + +}; + +#endif //T_TSDOCUMENTLOADER_H diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,44 @@ +# +# 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: +# + +TEMPLATE = app +CONFIG += hb testcase + +INCLUDEPATH += . \ + ../../inc \ + +HEADERS += t_tsdocumentloader.h \ + ../../inc/tsdocumentloader.h \ + ../../inc/tstasksgrid.h \ + ../../inc/tstasksgriditem.h \ + ../../inc/tsnoitemslabel.h \ + +SOURCES += t_tsdocumentloader.cpp \ + ../../src/tsdocumentloader.cpp \ + ../../src/tstasksgrid.cpp \ + ../../src/tstasksgriditem.cpp \ + ../../src/tsnoitemslabel.cpp \ + +RESOURCES += t_tsdocumentloader.qrc + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB +} + +include(../../../common.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader/t_tsdocumentloader.qrc Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,5 @@ + + + resource/test.docml + + diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel/t_tsmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel/t_tsmodel.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,451 @@ +/* +* 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_tsmodel.h" +#include +#include +#include "tsmodel.h" +#include "afmanager.h" +#include +#include "tstaskchangeinfo.h" + +#include + +#define TSTASKMONITOR_TEST 1 + +const int dataSetsCount(50); +const char serviceName [] = "TestActivityService"; +const char ActivityIconKeyword [] = "screenshot"; +const char ActivityVisibleKeyword [] = "visible"; + +//TEST CASES + +void T_TsModel::testData() +{ + QVERIFY(mModel); + QVERIFY(activityService()); + for (int dataSet(0); dataSet < activityDataSetsCount(); ++dataSet) { + QListdata(activityDataSet(dataSet)); + //provide test data to TestActivityManager + QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, data)); + QList applications(appDataSetFull(dataSet)); + QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, applications)); + //force data update on model. framework doesnt provide observer functionality + mModel->fullUpdate(); + + int offset =0; + + //Verify data. Applications come first... + + foreach ( TsTaskChange application, applications) { + if(application.first.changeType() == TsTaskChangeInfo::EChangeCancel ) { + continue; + } + QVERIFY(application.second->name() == mModel->data(mModel->index(offset), Qt::DisplayRole).toString()); + //icon can't be realy checked, but can be called + mModel->data(mModel->index(offset), Qt::DecorationRole); + QVERIFY(application.second->isClosable() == mModel->data(mModel->index(offset), Qt::UserRole + 1).toBool());//is closable + + QVERIFY(!mModel->data(mModel->index(offset), Qt::UserRole + 100).isValid());//call some unsupported role + ++offset;//move to next model row + } + + //Activity come second + QList::const_iterator activity(data.begin()); + for (; activity != data.end(); ++activity) { + QString debstr = mModel->data(mModel->index(offset), Qt::DisplayRole).toString(); + QVERIFY(0>=mModel->data(mModel->index(offset), Qt::DisplayRole).toString().length()); + //icon can't be realy checked, but can be called + mModel->data(mModel->index(offset), Qt::DecorationRole); + QVERIFY(!mModel->data(mModel->index(offset), Qt::UserRole + 1).toBool());//is closable + + QVERIFY(!mModel->data(mModel->index(offset), Qt::UserRole + 100).isValid());//call some unsupported role + ++offset;//move to next model row + } + //call data out of range + QVERIFY(!mModel->data(mModel->index(-1), Qt::DisplayRole).isValid()); + } +} + +void T_TsModel::testRowCount() +{ + QVERIFY(mModel); + QVERIFY(activityService()); + for (int dataSet(0); dataSet < activityDataSetsCount(); ++dataSet) { + QList activity(activityDataSet(dataSet)); + //provide test data to TestActivityManager + QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, activity)); + + + QList applications(appDataSetFull(dataSet)); + //provide test data to TestActivityManager + QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, applications)); + + + //force data update on model. framework doesnt provide observer functionality + mModel->fullUpdate(); + QVERIFY(mModel->rowCount() <= (activity.count() + applications.count())); + } +} + +void T_TsModel::testOpenApplication() +{ + QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, activityDataSet(1))); + mModel->fullUpdate(); + for (int i =0; i < mModel->rowCount(); ++i) { + mModel->openApplication(mModel->index(i));//just call without veryfication + } + mModel->openApplication(mModel->index(-1));//just call without veryfication + +} + +void T_TsModel::testCloseApplication() +{ + QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, activityDataSet(1))); + mModel->fullUpdate(); + for (int i =0; i < mModel->rowCount(); ++i) { + mModel->closeApplication(mModel->index(i));//just call without veryfication + } + mModel->closeApplication(mModel->index(-1));//just call without veryfication +} + +void T_TsModel::testActivityWithNoIdDisplaysProperApplicationName() +{ + // prepare activity entry with no activity ID, but with proper application name + QVariantHash activity; + RProcess process; + activity.insert(ActivityApplicationKeyword, static_cast(process.SecureId().iId)); + + // prepare data set with only prepared activity + QVERIFY(QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, QList() << activity))); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, QList()))); + mModel->fullUpdate(); + + // verify the application name is correctly returned as a DisplayRole + QCOMPARE(mModel->rowCount(), 1); + QVERIFY(mModel->index(0).isValid()); + QVERIFY(!mModel->data(mModel->index(0), Qt::DisplayRole).toString().isEmpty()); +} + +void T_TsModel::testDataChangedSignalIsEmittedWhenActivityScreenshotIsUpdated() +{ + // prepare activity entry + QVariantHash activity; + activity.insert(ActivityIconKeyword, "FakeScreenshotPath"); + + // prepare data set with only prepared activity + QVERIFY(QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, QList() << activity))); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, QList()))); + mModel->fullUpdate(); + + // prepare signal spy + qRegisterMetaType("QModelIndex"); + QSignalSpy spy(mModel, SIGNAL(dataChanged(QModelIndex,QModelIndex))); + QVERIFY(spy.isValid()); + + // getting the decoration role should trigger asynchronous screenshot retrieval and dataChanged signal emission + QCOMPARE(mModel->rowCount(), 1); + QVERIFY(mModel->index(0).isValid()); + mModel->data(mModel->index(0), Qt::DecorationRole); + + // verify proper data passed in signal + QCOMPARE(spy.count(), 1); + QCOMPARE(spy.first().at(0).value().row(), 0); + QCOMPARE(spy.first().at(1).value().row(), 0); +} + +void T_TsModel::testCustomNameIsUsedIfPresent() +{ + RProcess process; + int applicationId = static_cast(process.SecureId().iId); + + // prepare activity entries + QVariantHash activityWithCustomName; + activityWithCustomName.insert(ActivityApplicationName, "Custom Activity Name"); + activityWithCustomName.insert(ActivityApplicationKeyword, applicationId); + + QVariantHash otherActivity; + otherActivity.insert(ActivityApplicationKeyword, applicationId); + + // prepare data set with only prepared activities + QVERIFY(QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, QList() << activityWithCustomName << otherActivity))); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, QList()))); + mModel->fullUpdate(); + + // first activity uses custom name + QCOMPARE(mModel->rowCount(), 2); + QCOMPARE(mModel->data(mModel->index(0), Qt::DisplayRole), QVariant("Custom Activity Name")); + + // second one didn't define custom name, so it uses application name + QVERIFY(!mModel->data(mModel->index(1), Qt::DisplayRole).toString().isEmpty()); +} + +void T_TsModel::testInsert1() +{ + QVERIFY(mModel); + clearModel(); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSet5New()))); + QCOMPARE(mModel->rowCount(), 5); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSetInsert1(3)))); + QCOMPARE(mModel->rowCount(), 6); + QVERIFY(changeDataSetInsert1(3)[0].second->name() == mModel->data(mModel->index(3), Qt::DisplayRole).toString()); + +} + +void T_TsModel::testDelete1() +{ + QVERIFY(mModel); + clearModel(); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSet5New()))); + QCOMPARE(mModel->rowCount(), 5); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSetDelete1(1)))); + QCOMPARE(mModel->rowCount(), 4); + QCOMPARE(changeDataSet5New()[3].second->name(), mModel->data(mModel->index(1), Qt::DisplayRole).toString()); +} + +void T_TsModel::testChange1() +{ + QVERIFY(mModel); + clearModel(); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSet5New()))); + QCOMPARE(mModel->rowCount(), 5); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSetChange1(2)))); + QCOMPARE(mModel->rowCount(), 5); + QCOMPARE(changeDataSetChange1(2)[0].second->name(), mModel->data(mModel->index(2), Qt::DisplayRole).toString()); +} + +void T_TsModel::testMove1() +{ + QVERIFY(mModel); + clearModel(); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSet5New()))); + QCOMPARE(mModel->rowCount(), 5); + QVERIFY(QMetaObject::invokeMethod(mAppSrv, + "setTaskList", + Q_ARG(QList, changeDataSetMove1(1,2)))); + QCOMPARE(mModel->rowCount(), 5); + QCOMPARE(changeDataSet5New()[2].second->name(), mModel->data(mModel->index(2), Qt::DisplayRole).toString()); + QCOMPARE(changeDataSet5New()[3].second->name(), mModel->data(mModel->index(1), Qt::DisplayRole).toString()); +} + +void T_TsModel::testFullUpdateFromActivities() +{ + QVERIFY(mModel); + QVERIFY(activityService()); + clearModel(); + QList activity(activityDataSet(5)); + //provide test data to TestActivityManager + QMetaObject::invokeMethod(activityService(), + "setActivitiesList", + Q_ARG(QList, activity)); + QMetaObject::invokeMethod(activityService(), + "emitDataChanged"); + QCOMPARE(mModel->rowCount(), 5); +} + +//QTEST CALLBACKS + +void T_TsModel::initTestCase() +{ + mAppSrv = new MockTsTaskMonitor(); + mActSrv = new AfManager(); + QVERIFY(mAppSrv); + QVERIFY(mActSrv); + mModel = new TsModel(*mAppSrv, *mActSrv); + QVERIFY(mModel); + +} + +void T_TsModel::cleanupTestCase() +{ + delete mModel; + mModel = 0; + delete mActSrv; + mActSrv = 0; + QtMobility::QServiceManager manager; + manager.removeService(serviceName); + delete mAppSrv; +} + +// HELPER FUNCTIONS + +QObject *T_TsModel::activityService() +{ + return mActSrv; +} + +QList T_TsModel::activityDataSet(int setId)const +{ + if (setId >100) { + setId = 0; + } + QList retVal; + QVariantHash node; + int visibility = 0; + for (int i =0; i < setId; ++i) { + + //valid node + node.clear(); + node.insert(ActivityApplicationKeyword, i+120); + node.insert(ActivityActivityKeyword, QString("testactivity%1").arg(i+120)); + node.insert(ActivityIconKeyword, QString()); + switch (visibility++) { + case 0://visible + node.insert(ActivityVisibleKeyword, true); + break; + case 1://invisible + node.insert(ActivityVisibleKeyword, false); + break; + default://empty + break; + }; + if (2 < visibility) { + visibility = 0; + } + retVal.append(node); + } + return retVal; +} + +QList T_TsModel::appDataSetFull(int setId) +{ + if (setId >100) { + setId = 0; + } + QList retVal; + TsTaskChangeInfo qtChangeItem(-2, -2); + + retVal.append(TsTaskChange(qtChangeItem, QSharedPointer())); + for (int iter(0); iter < setId; ++iter) { + //valid node + qtChangeItem = TsTaskChangeInfo(iter, TsTaskChangeInfo::KInvalidOffset); + QSharedPointer node(new TsTask(new TsTaskContent(QString("testapplication%1").arg(iter), iter % 2, iter % 3), *this)); + retVal.append(TsTaskChange(qtChangeItem, node)); + } + return retVal; +} + +QList T_TsModel::changeDataSet5New() +{ + QList retVal; + TsTaskChangeInfo qtChangeItem = TsTaskChangeInfo(); + // 1 cancel item at start of full update + retVal.append(TsTaskChange(qtChangeItem, QSharedPointer())); + // now 5 new items and changesetitem set to insert + for (int iter(0); iter < 5; iter++) { + qtChangeItem = TsTaskChangeInfo(iter, TsTaskChangeInfo::KInvalidOffset); + QSharedPointer node(new TsTask(new TsTaskContent(QString("test %1").arg(iter+1), true, true), *this)); + retVal.append(TsTaskChange(qtChangeItem, node)); + } + return retVal; +} + +QList T_TsModel::changeDataSetDelete1(int index) +{ + QList retVal; + TsTaskChangeInfo qtChangeItem(TsTaskChangeInfo::KInvalidOffset, index); + + retVal.append(TsTaskChange(qtChangeItem, QSharedPointer())); + + return retVal; +} + +QList T_TsModel::changeDataSetInsert1(int index) +{ + QList retVal; + TsTaskChangeInfo qtChangeItem(index, TsTaskChangeInfo::KInvalidOffset); + QSharedPointer node(new TsTask(new TsTaskContent(QString("inserted %1").arg(index+1), true, true), *this)); + + retVal.append(TsTaskChange(qtChangeItem, node)); + + return retVal; +} + +QList T_TsModel::changeDataSetChange1(int index) +{ + QList retVal; + TsTaskChangeInfo qtChangeItem(index, index); + QSharedPointer node(new TsTask(new TsTaskContent(QString("changed %1").arg(index+1), true, true), *this)); + + retVal.append(TsTaskChange(qtChangeItem, node)); + + return retVal; +} + +QList T_TsModel::changeDataSetMove1(int newIndex, int oldIndex) +{ + QList retVal; + TsTaskChangeInfo qtChangeItem(newIndex, oldIndex); + + retVal.append(TsTaskChange(qtChangeItem, QSharedPointer())); + + return retVal; +} + +int T_TsModel::activityDataSetsCount()const +{ + return dataSetsCount; +} + +void T_TsModel::clearModel() +{ + QMetaObject::invokeMethod(mAppSrv, + "clearTasks"); + QMetaObject::invokeMethod(activityService(), + "clearActivities"); + mModel->fullUpdate(); +} + +QTEST_MAIN(T_TsModel) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel/t_tsmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel/t_tsmodel.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,81 @@ +/* +* 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: +* +*/ +#ifndef T_TSMODEL_H +#define T_TSMODEL_H + + + +#include +#include +#include +#include +#include + +#include "mocktstask.h" +#include "mocktstaskmonitor.h" + +class TsModel; +class TsTaskChangeInfo; + +/** +* @test Test class for TsModel +*/ +class T_TsModel : public QObject, public TsTaskLauncher +{ + Q_OBJECT + +private slots: + void testData(); + void testRowCount(); + void testOpenApplication(); + void testCloseApplication(); + void testActivityWithNoIdDisplaysProperApplicationName(); + void testDataChangedSignalIsEmittedWhenActivityScreenshotIsUpdated(); + void testCustomNameIsUsedIfPresent(); + void testInsert1(); + void testDelete1(); + void testChange1(); + void testMove1(); + void testFullUpdateFromActivities(); + +private slots: + void initTestCase(); + void cleanupTestCase(); + +private: + QObject *activityService(); + QList activityDataSet(int)const; + QList appDataSetFull(int); + QList changeDataSet5New(); + QList changeDataSetDelete1(int index); + QList changeDataSetInsert1(int index); + QList changeDataSetChange1(int index); + QList changeDataSetMove1(int newIndex, int oldIndex); + void clearModel(); + + int activityDataSetsCount()const; + + +private: + TsModel *mModel; + TsTaskMonitor *mAppSrv; + QObject *mActSrv; +}; + +Q_DECLARE_METATYPE(QModelIndex) + +#endif //T_TSMODEL_H diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel/t_tsmodel.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel/t_tsmodel.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,59 @@ +# +# 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: +# + +TEMPLATE = app +CONFIG += hb testcase mobility +MOBILITY = serviceframework + +INCLUDEPATH += . \ + ../mocks \ + ../../inc \ + ../../../../inc \ + +HEADERS += t_tsmodel.h \ + ../../../../inc/tstaskmonitor.h \ + ../../../../inc/tstaskchangeinfo.h \ + ../mocks/afmanager.h \ + ../mocks/mocktstaskmonitor.h \ + ../mocks/mocktstask.h \ + ../../inc/tsmodel.h \ + ../../inc/tsmodelitem.h \ + ../../inc/tsentrymodelitem.h \ + ../../inc/tsactivitymodelitem.h + +SOURCES += t_tsmodel.cpp \ + ../mocks/afmanager.cpp \ + ../mocks/mocktstaskmonitor.cpp \ + ../mocks/mocktstask.cpp \ + ../../src/tsmodel.cpp \ + ../../src/tsentrymodelitem.cpp \ + ../../src/tsactivitymodelitem.cpp \ + ../../../../taskswitcher/client/src/tstaskchangeinfo.cpp + +DEFINES += TSTASKMONITOR_TEST + +symbian { + CONFIG += symbian_test + LIBS += -lxqsettingsmanager + + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + + LIBS += -lapgrfx -lapparc +} + +include(../../../common.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem/t_tstaskgriditem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem/t_tstaskgriditem.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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_tstaskgriditem.h" +#include "tstasksgriditem.h" +#include +#include +void T_TsTaskGridItem::testConstructor() +{ + QVERIFY(0!=mInstance); +} + +void T_TsTaskGridItem::testCreateItem() +{ + HbAbstractViewItem *const instance = mInstance->createItem(); + delete instance; + QVERIFY(0!=instance); +} + +void T_TsTaskGridItem::testUpdateChildItems() +{ + HbAbstractViewItem *item = mInstance->createItem(); + item->updateChildItems(); + delete item; +} + +void T_TsTaskGridItem::init() +{ + mInstance = new TsTasksGridItem(); + QVERIFY(0!=mInstance); +} + +void T_TsTaskGridItem::clean() +{ + delete mInstance; + mInstance = 0; +} + +QTEST_MAIN(T_TsTaskGridItem) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem/t_tstaskgriditem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem/t_tstaskgriditem.h Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ +#ifndef T_TSTSAKGRIDITEM_H +#define T_TSTSAKGRIDITEM_H + +#include +class TsTasksGridItem; +/** +* @test Test class for TsDeviceDialogPlugin +*/ +class T_TsTaskGridItem : public QObject +{ + Q_OBJECT + +private slots: + void testConstructor(); + void testCreateItem(); + void testUpdateChildItems(); +private slots: + void init(); + void clean(); +private: + TsTasksGridItem *mInstance; +}; + +#endif //T_TSTSAKGRIDITEM_H diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem/t_tstaskgriditem.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem/t_tstaskgriditem.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,36 @@ +# +# 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: +# + +TEMPLATE = app +CONFIG += hb testcase + +INCLUDEPATH += . \ + ../../inc \ + +HEADERS += t_tstaskgriditem.h \ + ../../inc/tstasksgriditem.h \ + +SOURCES += t_tstaskgriditem.cpp \ + ../../src/tstasksgriditem.cpp \ + +symbian { + CONFIG += symbian_test + coverage: CONFIG -= symbian_test + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB +} + +include(../../../common.pri) diff -r 3ab5c078b490 -r c63ee96dbe5f tsdevicedialog/tsdevicedialogplugin/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsdevicedialog/tsdevicedialogplugin/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,26 @@ +# +# 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: +# + +TEMPLATE = subdirs + +CONFIG += ordered + +SUBDIRS += ../../../internal/tstestutils + +SUBDIRS += t_tsdevicedialogplugin \ + t_tsdocumentloader \ + t_tsmodel \ + t_tstaskgriditem \ diff -r 3ab5c078b490 -r c63ee96dbe5f tsrc/applib_cov.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/applib_cov.pl Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,55 @@ +#!/usr/bin/perl +# +# 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 the License "Symbian Foundation License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +#USAGE: +# Usage: 101ctc.pl [-make=command] +# -make=instrument || run || ctcpost + +# import module +use Getopt::Long; +use Cwd; + +# read options +my $make = "all"; +my $success = GetOptions ("make=s" => \$make); + +if($make) { + + if (($make eq "instrument") || ($make eq "all")) { + + `for /R .. %i IN (mon.*) DO del %i`; + system("del profile.txt"); + `for /D %f IN (CTC*) DO rmdir /S /Q %f`; + + system("call qmake -config tests_applib -config coverage"); + system("call sbs -c winscw_udeb reallyclean"); + system("ctcwrap -i fd -2comp -C EXCLUDE+*\\internal\\*,*\\tsrc\\*,*\\moc_*.cpp,*\\qrc_*.cpp -C SOURCE_IDENTIFICATION=absolute sbs -c winscw_udeb"); + } + if (($make eq "run") || ($make eq "all")) { + system("\\epoc32\\release\\winscw\\udeb\\cmdrunner.exe srvtests.txt"); + + } + if (($make eq "ctcpost") || ($make eq "all")) { + system("call ctcpost -ff -p profile.txt"); + system("call ctc2html -nsb -i profile.txt -o CTCFUNCTION"); + system("call del profile.txt"); + system("call ctcpost -T 70 -fd -p profile.txt"); + system("call ctc2html -t 70 -nsb -i profile.txt -o CTCDECISION"); + } +} + +print "END.\n"; diff -r 3ab5c078b490 -r c63ee96dbe5f tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/tsrc.pro Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,80 @@ +# +# 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: +# + +TEMPLATE = subdirs + +tests: { + CONFIG += tests_applib + CONFIG += tests_ts +} + +tests_applib: { +SUBDIRS += \ + ./../contentstorage/castorage/tsrc/t_castorage \ + ./../contentstorage/casoftwareregistry/tsrc/t_casoftwareregistry \ + ./../contentstorage/casrv/caappscanner/tsrc/t_caappscanner \ + ./../contentstorage/casrv/causifscanner/tsrc/t_causifscanner \ + ./../contentstorage/casrv/calocalizerscanner/tsrc/t_calocalizerscanner \ + ./../contentstorage/casrv/carunningappmonitor/tsrc/t_carunningappmonitor \ + ./../contentstorage/casrv/casatmonitor/tsrc/t_satmonitor \ + ./../contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner \ + ./../contentstorage/tsrc/t_casrv \ + ./../contentstorage/tsrc/t_sathandler \ + ./../contentstorage/caclient/tsrc/t_caclient \ + ./../homescreensrv_plat/menu_sat_interface_api/tsrc/t_menu_sat_interface_api \ + ./../contentstorage/cahandler/app/tsrc/t_caapphandler \ + ./../contentstorage/cahandler/url/tsrc/t_caurlhandler \ + ./../contentstorage/cahandler/tapp/tsrc/t_catapphandler \ + ./../contentstorage/camificonengine/tsrc/t_camificonengine \ + +} + +tests_ts: { +SUBDIRS += ./../internal/tstestutils \ #common test utilities + ./../activityfw/activityserviceplugin/tsrc/unittest_activityserviceplugin \ + ./../activityfw/activityserviceplugin/tsrc/unittest_activityclient \ + ./../activityfw/activityserviceplugin/tsrc/unittest_activitymanager \ + ./../activityfw/activityserviceplugin/tsrc/unittest_applicationluncher \ + ./../activityfw/activityserviceplugin/tsrc/unittest_commandlineparser \ + ./../activityfw/activityserviceplugin/tsrc/t_afstorageproxy \ + ./../activityfw/activityserviceplugin/tsrc/t_afactivation \ + ./../activityfw/activityserviceplugin/tsrc/t_afactivitystorage \ + ./../activityfw/afactivitylauncher/tsrc/t_afactivitylauncher \ + ./../activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher \ + ./../activityfw/storage/client/t_afstorageclient \ + ./../activityfw/storage/server/tsrc/t_server \ + ./../hsappkeyhandler/tsrc/t_hsappkeyhandler \ + ./../activityfw/tsutils/tsrc/t_tsgraphicfilescalinghandler \ + ./../taskswitcher/client/tsrc/t_tstasksettings \ + ./../taskswitcher/client/tsrc/t_tstaskmonitorclient \ + ./../taskswitcher/server/tsrc/t_tsmodelitem \ + ./../taskswitcher/server/tsrc/t_tsstorage \ + ./../taskswitcher/server/tsrc/t_tsserializeddataprovider \ + ./../taskswitcher/server/tsrc/t_tsservicesprovider \ + ./../taskswitcher/server/tsrc/t_tsservicesproviderconfig \ + ./../taskswitcher/screenshotplugin/tsrc/t_screenshotplugin \ + ./../taskswitcher/utils/tsrc/t_tsentrykeyhandling \ + ./../taskswitcher/backstepping/tsrc/t_tsbackstepping \ + ./../internal/tsapps/testapp/appwithouticon \ #helper app for unittest_applicationluncher, t_tsrunningappstorage, t_tsbackstepping, t_tstaskmonitorclient + ./../internal/tsapps/testapp/appwithicon \ #helper app for t_tsrunningappstorage, t_tsbackstepping + ./../internal/tsapps/testapp/apppublishingactivity \ #helper app for unittest_applicationluncher + ./../tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdevicedialogplugin \ + ./../tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsdocumentloader \ + ./../tsdevicedialog/tsdevicedialogplugin/tsrc/t_tsmodel \ + ./../tsdevicedialog/tsdevicedialogplugin/tsrc/t_tstaskgriditem \ + +} +CONFIG += ordered