--- /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);
+}