contentstorage/castorage/tsrc/t_castorage/src/castoragetestremove.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:
*
*/
/*
 * 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);
}