taskswitcher/backstepping/tsrc/t_tsbackstepping/t_tsbackstepping.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies 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 <QtTest/QtTest>
#include <QPixmap>
#include <e32std.h>
#include <AknDef.h>
#include <QString>
#include <qdebug>
#include <apgcli.h>
#include <apacmdln.h>
#include <apgtask.h>
#include <eikenv.h>
#include <s32strm.h>
#include <S32MEM.H>
#include <APGWGNAM.H>
#include <FBS.H>
#include "t_tsbackstepping.h"
#include "tsbackstepping.h"
#include <tsresourcemanager.h>
#include <tswindowgroupsobserver.h>

#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<RWsSession::TWindowGroupChainInfo> 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<MTsWindowGroupsObserver*>(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)