--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/castorage/tsrc/t_castorage/src/castoragetestadd.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,1047 @@
+/*
+* 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:
+*
+*/
+/*
+ * castoragetestadd.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"
+#include "caarraycleanup.inl"
+#include <QMap>
+#include <QString>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAdd()
+{
+ __UHEAP_MARK;
+ TInt entryId(0);
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ mStorage->AddL(innerEntry);
+ entryId = innerEntry->GetId();
+
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+ QVERIFY(entryId > 0);
+
+ __UHEAP_MARKEND;
+
+}
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddEmptyIcon()
+{
+ TInt entryId(0);
+ __UHEAP_MARK;
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(KNullDesC, KNullDesC, KNullDesC);
+ mStorage->AddL(innerEntry);
+ entryId = innerEntry->GetId();
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+ QCOMPARE(err, KErrNone);
+ QVERIFY(entryId > 0);
+
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddWithIcon()
+{
+ __UHEAP_MARK;
+ TInt entryId(0);
+ TInt iconId(0);
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("qtg_large_applications_user"), KNullDesC, KNullDesC);
+ mStorage->AddL(innerEntry);
+
+ entryId = innerEntry->GetId();
+ iconId = innerEntry->GetIconId();
+
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+
+
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddWithExistingIcon()
+{
+ __UHEAP_MARK;
+ TInt entryId1(0);
+ TInt iconId1(0);
+ TInt entryId2(0);
+ TInt iconId2(0);
+ TInt countIconsAfterFirstAdd (0);
+ TInt countIconsAfterSecondAdd (0);
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+ mStorage->AddL(innerEntry);
+
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterFirstAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ // Add second entry with the some icon
+ CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC();
+ innerEntry2->SetTextL(KTestName2);
+ innerEntry2->SetEntryTypeNameL(KTypeName);
+ innerEntry2->SetFlags(flag);
+ innerEntry2->SetRole(CCaInnerQuery::Group);
+ innerEntry2->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+ mStorage->AddL(innerEntry2);
+
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterSecondAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId1 = innerEntry->GetId();
+ iconId1 = innerEntry->GetIconId();
+
+ entryId2 = innerEntry2->GetId();
+ iconId2 = innerEntry2->GetIconId();
+
+ CleanupStack::PopAndDestroy(innerEntry2);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ // No new icon created; Icon which is the same should be shared by newly added entries
+ QCOMPARE(countIconsAfterFirstAdd, countIconsAfterSecondAdd);
+
+ QVERIFY(entryId1 > 0);
+ QVERIFY(iconId1 > 0);
+ QVERIFY(entryId2 > 0);
+ QVERIFY(iconId2 > 0);
+ QVERIFY(!(entryId1 == entryId2));
+ QCOMPARE(iconId1, iconId2);
+
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddWithExistingIconOnlyFileName()
+{
+ __UHEAP_MARK;
+ TInt entryId1(0);
+ TInt iconId1(0);
+ TInt entryId2(0);
+ TInt iconId2(0);
+ TInt countIconsAfterFirstAdd (0);
+ TInt countIconsAfterSecondAdd (0);
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("qtg_large_applications_user"), KNullDesC, KNullDesC);
+ mStorage->AddL(innerEntry);
+
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterFirstAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ // Add second entry with the some icon
+ CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC();
+ innerEntry2->SetTextL(KTestName2);
+ innerEntry2->SetEntryTypeNameL(KTypeName);
+ innerEntry2->SetFlags(flag);
+ innerEntry2->SetRole(CCaInnerQuery::Group);
+ innerEntry2->SetIconDataL(_L("qtg_large_applications_user"), KNullDesC, KNullDesC);
+ mStorage->AddL(innerEntry2);
+
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterSecondAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId1 = innerEntry->GetId();
+ iconId1 = innerEntry->GetIconId();
+
+ entryId2 = innerEntry2->GetId();
+ iconId2 = innerEntry2->GetIconId();
+
+ CleanupStack::PopAndDestroy(innerEntry2);
+ CleanupStack::PopAndDestroy(innerEntry);
+
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ // No new icon created; Icon which is the same should be shared by newly added entries
+ QCOMPARE(countIconsAfterFirstAdd, countIconsAfterSecondAdd);
+
+
+ QVERIFY(entryId1 > 0);
+ QVERIFY(iconId1 > 0);
+ QVERIFY(entryId2 > 0);
+ QVERIFY(iconId2 > 0);
+ QVERIFY(!(entryId1 == entryId2));
+ QCOMPARE(iconId1, iconId2);
+
+
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddWithPartlyMatchingIcon()
+{
+ __UHEAP_MARK;
+ TInt entryId1(0);
+ TInt iconId1(0);
+ TInt entryId2(0);
+ TInt iconId2(0);
+ TInt countIconsAfterFirstAdd (0);
+ TInt countIconsAfterSecondAdd (0);
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+ mStorage->AddL(innerEntry);
+
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterFirstAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ // Add second entry with the some icon
+ CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC();
+ innerEntry2->SetTextL(KTestName2);
+ innerEntry2->SetEntryTypeNameL(KTypeName);
+ innerEntry2->SetFlags(flag);
+ innerEntry2->SetRole(CCaInnerQuery::Group);
+ innerEntry2->SetIconDataL(_L("filename"), _L("skinId2"), _L("111111111"));
+ mStorage->AddL(innerEntry2);
+
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterSecondAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId1 = innerEntry->GetId();
+ iconId1 = innerEntry->GetIconId();
+
+ entryId2 = innerEntry2->GetId();
+ iconId2 = innerEntry2->GetIconId();
+
+ CleanupStack::PopAndDestroy(innerEntry2);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ // New icon should be added
+ QCOMPARE(countIconsAfterSecondAdd - countIconsAfterFirstAdd, 1);
+
+ QVERIFY(entryId1 > 0);
+ QVERIFY(iconId1 > 0);
+ QVERIFY(entryId2 > 0);
+ QVERIFY(iconId2 > 0);
+ QVERIFY(!(entryId1 == entryId2));
+ QVERIFY(!(iconId1 == iconId2));
+
+ __UHEAP_MARKEND;
+}
+
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddWithPartlyMatchingIconNotAllParams()
+{
+ __UHEAP_MARK;
+ TInt entryId1(0);
+ TInt iconId1(0);
+ TInt entryId2(0);
+ TInt iconId2(0);
+ TInt countIconsAfterFirstAdd (0);
+ TInt countIconsAfterSecondAdd (0);
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), KNullDesC);
+ mStorage->AddL(innerEntry);
+
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterFirstAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ // Add second entry with the some icon
+ CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC();
+ innerEntry2->SetTextL(KTestName2);
+ innerEntry2->SetEntryTypeNameL(KTypeName);
+ innerEntry2->SetFlags(flag);
+ innerEntry2->SetRole(CCaInnerQuery::Group);
+ innerEntry2->SetIconDataL(KNullDesC, _L("skinId"), KNullDesC);
+ mStorage->AddL(innerEntry2);
+
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterSecondAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId1 = innerEntry->GetId();
+ iconId1 = innerEntry->GetIconId();
+
+ entryId2 = innerEntry2->GetId();
+ iconId2 = innerEntry2->GetIconId();
+
+ CleanupStack::PopAndDestroy(innerEntry2);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ // New icon should be added
+ QCOMPARE(countIconsAfterSecondAdd - countIconsAfterFirstAdd, 1);
+
+ QVERIFY(entryId1 > 0);
+ QVERIFY(iconId1 > 0);
+ QVERIFY(entryId2 > 0);
+ QVERIFY(iconId2 > 0);
+ QVERIFY(!(entryId1 == entryId2));
+ QVERIFY(!(iconId1 == iconId2));
+
+ __UHEAP_MARKEND;
+}
+
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddWithNotCompleteIcon()
+{
+ TInt entryId(0);
+ TInt iconId(0);
+ __UHEAP_MARK;
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("fake"), KNullDesC, KNullDesC);
+ mStorage->AddL(innerEntry);
+
+ entryId = innerEntry->GetId();
+ iconId = innerEntry->GetIconId();
+
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddUpdateIcon()
+{
+ TInt entryId(0);
+ TInt iconId(0);
+ TInt updatedEntryId(0);
+ TInt updatedIconId(0);
+ TInt countIconsAfterAdd (0);
+ TInt countIconsAfterUpdate (0);
+
+ RBuf updatedIconFileName;
+ RBuf updatedIconSkinId;
+ RBuf updatedIconAppId;
+ TInt updatedIconIdFormIcon(0);
+
+ __UHEAP_MARK;
+ updatedIconFileName.CreateL( KMaxFileName );
+ updatedIconSkinId.CreateL( KMaxFileName );
+ updatedIconAppId.CreateL( KMaxUidName );
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+ mStorage->AddL(innerEntry);
+
+ // Check db after add with icon
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId = innerEntry->GetId();
+ iconId = innerEntry->GetIconId();
+
+ innerEntry->SetTextL(KTestNameUpdate);
+ innerEntry->SetFlags(flagUpdate);
+ innerEntry->SetIconDataL( _L("filename2"), _L("skinId2"), _L("537001519"));
+ mStorage->AddL(innerEntry);
+
+ // Check db after update with icon
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterUpdate);
+ CleanupStack::PopAndDestroy(query);
+
+ updatedEntryId = innerEntry->GetId();
+ updatedIconId = innerEntry->GetIconId();
+
+ updatedIconFileName = innerEntry->Icon()->FileName();
+ updatedIconSkinId= innerEntry->Icon()->SkinId();
+ updatedIconAppId = innerEntry->Icon()->ApplicationId();
+ updatedIconIdFormIcon = innerEntry->Icon()->Id();
+
+
+
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+ QCOMPARE(err, KErrNone);
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+ QCOMPARE(updatedEntryId, entryId);
+ QCOMPARE(updatedIconId, iconId);
+ QCOMPARE(updatedIconIdFormIcon, updatedIconId);
+ QVERIFY(!updatedIconFileName.Compare(_L("filename2")));
+ QVERIFY(!updatedIconSkinId.Compare(_L("skinId2")));
+ QVERIFY(!updatedIconAppId.Compare(_L("537001519")));
+
+ // No new icon should be added to DB
+ QCOMPARE(countIconsAfterAdd, countIconsAfterUpdate);
+
+
+ updatedIconFileName.Close();
+ updatedIconSkinId.Close();
+ updatedIconAppId.Close();
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddUpdateIconOnlyFewParams()
+{
+ TInt entryId(0);
+ TInt iconId(0);
+ TInt updatedEntryId(0);
+ TInt updatedIconId(0);
+ TInt countIconsAfterAdd (0);
+ TInt countIconsAfterUpdate (0);
+
+
+ RBuf updatedIconFileName;
+ RBuf updatedIconSkinId;
+ RBuf updatedIconAppId;
+ TInt updatedIconIdFormIcon(0);
+
+ __UHEAP_MARK;
+ updatedIconFileName.CreateL( KMaxFileName );
+ updatedIconSkinId.CreateL( KMaxFileName );
+ updatedIconAppId.CreateL( KMaxUidName );
+
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), KNullDesC, _L("268458321"));
+ mStorage->AddL(innerEntry);
+
+ // Check db after add with icon
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterAdd);
+ CleanupStack::PopAndDestroy(query);
+
+
+ entryId = innerEntry->GetId();
+ iconId = innerEntry->GetIconId();
+
+ innerEntry->SetTextL(KTestNameUpdate);
+ innerEntry->SetFlags(flagUpdate);
+ innerEntry->SetIconDataL( _L("filename2"), KNullDesC, _L("537001519"));
+ mStorage->AddL(innerEntry);
+
+ // Check db after update with icon
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterUpdate);
+ CleanupStack::PopAndDestroy(query);
+
+
+ updatedEntryId = innerEntry->GetId();
+ updatedIconId = innerEntry->GetIconId();
+
+ updatedIconFileName = innerEntry->Icon()->FileName();
+ updatedIconSkinId= innerEntry->Icon()->SkinId();
+ updatedIconAppId = innerEntry->Icon()->ApplicationId();
+ updatedIconIdFormIcon = innerEntry->Icon()->Id();
+
+
+
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+ QCOMPARE(err, KErrNone);
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+ QCOMPARE(updatedEntryId, entryId);
+ QCOMPARE(updatedIconId, iconId);
+ QCOMPARE(updatedIconIdFormIcon, updatedIconId);
+ QVERIFY(!updatedIconFileName.Compare(_L("filename2")));
+ QVERIFY(!updatedIconSkinId.Compare(KNullDesC));
+ QVERIFY(!updatedIconAppId.Compare(_L("537001519")));
+ // No new icon should be added to DB
+ QCOMPARE(countIconsAfterAdd, countIconsAfterUpdate);
+
+ updatedIconFileName.Close();
+ updatedIconSkinId.Close();
+ updatedIconAppId.Close();
+ __UHEAP_MARKEND;
+}
+
+
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddUpdateWithEmptyIcon()
+{
+ TInt countIconsAfterAdd(0);
+ TInt countIconsAfterUpdateWithEmptyIcon(0);
+ TInt entryId(0);
+ TInt iconId(0);
+ __UHEAP_MARK;
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+ // Add entry with icon - not null icon
+ mStorage->AddL(innerEntry);
+
+ // Check db after add with icon
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+
+ query->ExecuteL(countIconsAfterAdd);
+
+
+ CleanupStack::PopAndDestroy(query);
+
+ entryId = innerEntry->GetId();
+ iconId = innerEntry->GetIconId();
+
+ //CCaInnerEntry::TIconAttributes attr;
+ innerEntry->SetTextL(KTestNameUpdate);
+ innerEntry->SetFlags(flagUpdate);
+ //innerEntry->SetIconId( 0 );
+ innerEntry->SetIconDataL(KNullDesC, KNullDesC, KNullDesC);
+ //attr = innerEntry->GetIcon();
+ // Update entry with empty icon
+ mStorage->AddL(innerEntry);
+
+ // Check db after update with empty icon
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterUpdateWithEmptyIcon);
+
+ CleanupStack::PopAndDestroy(query);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+ // icon should be removed from db because we set params to NULL
+ QCOMPARE(countIconsAfterAdd - countIconsAfterUpdateWithEmptyIcon, 1);
+
+ __UHEAP_MARKEND;
+}
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddUpdateWithEmptyIconAdvanced()
+{
+ TInt countIconsAfterAdd(0);
+ TInt countIconsAfterUpdateWithEmptyIcon(0);
+ TInt entryId(0);
+ TInt iconId(0);
+ __UHEAP_MARK;
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+ // Add entry with icon - not null icon
+ mStorage->AddL(innerEntry);
+
+ CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC();
+ innerEntry2->SetTextL(KTestName2);
+ innerEntry2->SetEntryTypeNameL(KTypeName);
+ innerEntry2->SetFlags(flag);
+ innerEntry2->SetRole(CCaInnerQuery::Group);
+ innerEntry2->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+
+ // Add second entry with the some icon - not null icon
+ mStorage->AddL(innerEntry2);
+
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+
+ query->ExecuteL(countIconsAfterAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId = innerEntry->GetId();
+
+ iconId = innerEntry->GetIconId();
+
+ innerEntry->SetTextL(KTestNameUpdate);
+ innerEntry->SetFlags(flagUpdate);
+ //innerEntry->SetIconId( 0 );
+ innerEntry->SetIconDataL(KNullDesC, KNullDesC, KNullDesC);
+ // Update entry with empty icon
+ mStorage->AddL(innerEntry);
+
+
+ // Check db after update with empty icon
+
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterUpdateWithEmptyIcon);
+ CleanupStack::PopAndDestroy(query);
+ CleanupStack::PopAndDestroy(innerEntry2);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+ QCOMPARE(err, KErrNone);
+
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+
+ // icon shouldn't be removed from db because it is use by other entry
+ QCOMPARE(countIconsAfterUpdateWithEmptyIcon, countIconsAfterAdd);
+
+ __UHEAP_MARKEND;
+}
+
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddUpdateWithExistingIcon()
+{
+ TInt countIconsAfterAdd(0);
+ TInt countIconsAfterUpdateWithEmptyIcon(0);
+ TInt entryId(0);
+ TInt iconId(0);
+ __UHEAP_MARK;
+ TRAPD(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("158321"));
+ // Add entry with icon - not null icon
+ mStorage->AddL(innerEntry);
+
+ CCaInnerEntry *innerEntry2 = CCaInnerEntry::NewLC();
+ innerEntry2->SetTextL(KTestName2);
+ innerEntry2->SetEntryTypeNameL(KTypeName);
+ innerEntry2->SetFlags(flag);
+ innerEntry2->SetRole(CCaInnerQuery::Group);
+ innerEntry2->SetIconDataL(_L("filename2"), _L("skinId2"), KNullDesC);
+
+ // Add second entry with the some icon - not null icon
+ mStorage->AddL(innerEntry2);
+
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+
+ query->ExecuteL(countIconsAfterAdd);
+ CleanupStack::PopAndDestroy(query);
+
+ entryId = innerEntry->GetId();
+
+ iconId = innerEntry->GetIconId();
+
+ innerEntry->SetTextL(KTestNameUpdate);
+ innerEntry->SetFlags(flagUpdate);
+ //innerEntry->SetIconId( 0 );
+ innerEntry->SetIconDataL(_L("filename2"), _L("skinId2"), KNullDesC);
+ // Update entry with empty icon
+ mStorage->AddL(innerEntry);
+
+
+ // Check db after update with empty icon
+
+ query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLGetIdCountFromIconTable);
+ query->PrepareL();
+ query->ExecuteL(countIconsAfterUpdateWithEmptyIcon);
+ CleanupStack::PopAndDestroy(query);
+ CleanupStack::PopAndDestroy(innerEntry2);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+ QCOMPARE(err, KErrNone);
+
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+
+ // icon shouldn't be removed from db because it is use by other entry
+ QCOMPARE(countIconsAfterUpdateWithEmptyIcon, countIconsAfterAdd);
+
+ __UHEAP_MARKEND;
+}
+
+
+
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testAddAttributes()
+{
+ TInt err(KErrGeneral);
+ __UHEAP_MARK;
+ TRAP(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewL();
+ RPointerArray<CCaInnerEntry> innerEntryArray;
+ CleanupResetAndDestroyPushL(innerEntryArray);
+ innerEntryArray.AppendL(innerEntry);
+
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+
+ innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1);
+ innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2);
+ innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3);
+
+ mStorage->AddL(innerEntry);
+ // check status
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLCheckAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindEntryIdL(innerEntry->GetId());
+ RPointerArray<CCaInnerEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ TInt count = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ if (innerEntry->GetId() > 0)
+ if (innerEntry->GetIconId() > 0)
+ if (innerEntry->GetAttributes().Count() == count) {
+ err = KErrNone;
+ } else
+ err = KErrArgument;
+ else
+ err = KErrNotFound;
+ else
+ err = KErrNotFound;
+
+ if (!err) {
+ query->SetQueryL(KSQLGetAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindValuesForAddAttributeL(innerEntry, NULL);
+ query->ExecuteL(innerEntryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+ RCaEntryAttrArray attributes = innerEntry->GetAttributes();
+
+ if (!(
+ (attributes[0])->Name().Compare(KAttrName_1)
+ && (attributes[0])->Value().Compare(KAttrValue_1)
+ && (attributes[1])->Name().Compare(KAttrName_2)
+ && (attributes[1])->Value().Compare(KAttrValue_2)
+ && (attributes[2])->Name().Compare(KAttrName_3)
+ && (attributes[2])->Value().Compare(KAttrValue_3)
+ ))
+ err = KErrNone;
+ else
+ err = KErrNotSupported;
+ }
+
+ CleanupStack::PopAndDestroy(query);
+ CleanupStack::PopAndDestroy(&innerEntryArray);
+ );
+
+ __UHEAP_MARKEND;
+ QCOMPARE(err, KErrNone);
+}
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testUpdateAttributes()
+{
+ TInt err(KErrGeneral);
+ __UHEAP_MARK;
+// TRAP(err,
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewL();
+ RPointerArray<CCaInnerEntry> innerEntryArray;
+ CleanupResetAndDestroyPushL(innerEntryArray);
+ innerEntryArray.AppendL(innerEntry);
+
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+
+ innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1);
+ innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2);
+ innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3);
+
+ mStorage->AddL(innerEntry);
+ // check status
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLCheckAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindEntryIdL(innerEntry->GetId());
+ RPointerArray<CCaInnerEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ TInt count = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ if (innerEntry->GetId() > 0)
+ if (innerEntry->GetIconId() > 0)
+ if (innerEntry->GetAttributes().Count() == count) {
+ err = KErrNone;
+ } else
+ err = KErrArgument;
+ else
+ err = KErrNotFound;
+ else
+ err = KErrNotFound;
+
+ if (!err) {
+ innerEntry->AddAttributeL(KAttrName_2, KAttrName_1);
+ mStorage->AddL(innerEntry);
+ // check status
+ query->SetQueryL(KSQLCheckAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindEntryIdL(innerEntry->GetId());
+ RPointerArray<CCaInnerEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ TInt count = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ RCaEntryAttrArray attributes = innerEntry->GetAttributes();
+ if (innerEntry->GetAttributes().Count() == count) {
+ if (!(
+ (attributes[0])->Name().Compare(KAttrName_1)
+ && (attributes[0])->Value().Compare(KAttrValue_1)
+ && (attributes[1])->Name().Compare(KAttrName_2)
+ && (attributes[1])->Value().Compare(KAttrValue_1)
+ && (attributes[2])->Name().Compare(KAttrName_3)
+ && (attributes[2])->Value().Compare(KAttrValue_3)
+ )) {
+ innerEntry->RemoveAttributeL(KAttrName_1);
+ innerEntry->RemoveAttributeL(KAttrName_2);
+ innerEntry->RemoveAttributeL(KAttrName_3);
+ query->SetQueryL(KSQLGetAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindValuesForAddAttributeL(innerEntry, NULL);
+ query->ExecuteL(innerEntryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+
+ RCaEntryAttrArray newAttributes = innerEntry->GetAttributes();
+ if (!(
+ (newAttributes[0])->Name().Compare(KAttrName_1)
+ && (newAttributes[0])->Value().Compare(KAttrValue_1)
+ && (newAttributes[1])->Name().Compare(KAttrName_2)
+ && (newAttributes[1])->Value().Compare(KAttrValue_1)
+ && (newAttributes[2])->Name().Compare(KAttrName_3)
+ && (newAttributes[2])->Value().Compare(KAttrValue_3)
+ ))
+ err = KErrNone;
+ else
+ err = KErrNotSupported;
+ } else {
+ err = KErrNotReady;
+ }
+ } else
+ err = KErrNotReady;
+ }
+
+ CleanupStack::PopAndDestroy(query);
+ CleanupStack::PopAndDestroy(&innerEntryArray);
+// );
+ __UHEAP_MARKEND;
+ QCOMPARE(err, KErrNone);
+}
+// ---------------------------------------------------------------------------
+//
+void CCAStorageTest::testDeleteAttributes()
+{
+ TInt entryId(0);
+ TInt iconId(0);
+ TInt attributesACount(0);
+ TInt queryAResultCount(0);
+ TInt attributesBCount(0);
+ TInt queryBResultCount(0);
+ __UHEAP_MARK;
+ TRAPD(err,
+ // A query section starts
+ CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
+ innerEntry->SetTextL(KTestName);
+ innerEntry->SetEntryTypeNameL(KTypeName);
+ innerEntry->SetFlags(flag);
+ innerEntry->SetRole(CCaInnerQuery::Group);
+ innerEntry->SetIconDataL(_L("filename"), _L("skinId"), _L("268458321"));
+
+ innerEntry->AddAttributeL(KAttrName_1, KAttrValue_1);
+ innerEntry->AddAttributeL(KAttrName_2, KAttrValue_2);
+ innerEntry->AddAttributeL(KAttrName_3, KAttrValue_3);
+
+ mStorage->AddL(innerEntry);
+ // check status
+ CCaSqlQuery *query = CCaSqlQuery::NewLC(((CCaSqLiteStorage *)mStorage)->iSqlDb);
+ query->SetQueryL(KSQLCheckAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindEntryIdL(innerEntry->GetId());
+ RPointerArray<CCaInnerEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ queryAResultCount = query->ExecuteL(entryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ if (!err) {
+ entryId = innerEntry->GetId();
+ iconId = innerEntry->GetIconId();
+ attributesACount = innerEntry->GetAttributes().Count();
+
+ // B query section starts
+
+ innerEntry->RemoveAttributeL(KAttrName_1);
+ innerEntry->RemoveAttributeL(KAttrName_2);
+ innerEntry->RemoveAttributeL(KAttrName_3);
+ mStorage->AddL(innerEntry);
+ // check status
+ query->SetQueryL(KSQLCheckAttribute);
+ query->SetTableType(CCaSqlQuery::EAttributeTable);
+ query->PrepareL();
+ query->BindEntryIdL(innerEntry->GetId());
+ RPointerArray<CCaInnerEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ queryBResultCount= query->ExecuteL(entryArray, CCaSqlQuery::EAttribute);
+ query->CloseStatement();
+ CleanupStack::PopAndDestroy(&entryArray);
+ attributesBCount = innerEntry->GetAttributes().Count();
+ }
+ CleanupStack::PopAndDestroy(query);
+ CleanupStack::PopAndDestroy(innerEntry);
+ );
+ __UHEAP_MARKEND;
+
+ QVERIFY(entryId > 0);
+ QVERIFY(iconId > 0);
+ QCOMPARE(queryAResultCount, attributesACount);
+ QCOMPARE(queryBResultCount, 0);
+ QCOMPARE(queryBResultCount, attributesBCount);
+}
+// end of file