/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies 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);
}