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