contentstorage/castorage/tsrc/t_castorage/src/castoragetestremove.cpp
changeset 117 c63ee96dbe5f
--- /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<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);
+}