diff -r f5050f1da672 -r 04becd199f91 javamanager/javaregistry/tsrc/registryserver/src/testregistrypackageentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/javaregistry/tsrc/registryserver/src/testregistrypackageentry.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,993 @@ +/* +* 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: +* +*/ + +#include +#include + +#include "TestHarness.h" + +#include "javaregistry.h" +#include "javaregistryapplicationentry.h" +#include "javaregistrypackageentry.h" +#include "javastorage.h" +#include "javastorageexception.h" +#include "javastoragenames.h" +#include "javasymbianoslayer.h" +#include "javauid.h" +#include "logger.h" +#include "mjavaattribute.h" +#include "storagetestutils.h" + +using namespace std; +using namespace Java; +using namespace java::storage; +using namespace java::util; + +TEST_GROUP(TestRegistryPackageEntry) +{ + JavaStorage* js; + JavaStorageTestUtils* jtu; + + TEST_SETUP() + { + js = JavaStorage::createInstance(); + jtu = new JavaStorageTestUtils(); + } + TEST_TEARDOWN() + { + try + { + js->rollbackTransaction(); + js->close(); + delete js; + js = NULL; + } + catch (...) + { + // No can do + } + + delete js; + js = 0; + delete jtu; + jtu = 0; + } +}; + +/** + * Test CJavaRegistryPackageEntry::Version() method. + * 1. Test version set. + * 2. Test version not set. + */ +TEST(TestRegistryPackageEntry, TestVersion) +{ + LOG(EJavaStorage, EInfo, "+TestVersion"); + + JavaStorageApplicationEntry_t midlet1; + JavaStorageEntry attr; + + Uid suite1Uid(L"[e22a4577]"); + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet1.insert(attr); + + Uid midlet1Uid(L"[e22a4588]"); + + attr.setEntry(ID, midlet1Uid.toString()); + midlet1.insert(attr); + + js->open(); + js->startTransaction(); + + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet1)); + + JavaStorageApplicationEntry_t suite1; + attr.setEntry(PACKAGE_NAME, L"MySuite"); + suite1.insert(attr); + + wstring vendor = L"SuiteVendor"; + attr.setEntry(VENDOR, vendor); + suite1.insert(attr); + + attr.setEntry(VERSION, L"0.1"); + suite1.insert(attr); + + attr.setEntry(ID, suite1Uid.toString()); + suite1.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite1.insert(attr); + + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1)); + + // Session must be committed before next use of Registry otherwise + // it is locked. + js->commitTransaction(); + + auto_ptr registry(CJavaRegistry::NewL()); + + // 2. Application suite uid. + TUid suiteUid; + uidToTUid(suite1Uid, suiteUid); + + CJavaRegistryPackageEntry* entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + TAppVersion appVersion = entry->Version(); + TAppVersion refVersion(0, 1, 0); + + CHECK(appVersion.iMajor == refVersion.iMajor); + CHECK(appVersion.iMinor == refVersion.iMinor); + CHECK(appVersion.iBuild == refVersion.iBuild); + + delete entry; + entry = NULL; + + Uid suite2Uid(L"[e22b4577]"); + + JavaStorageApplicationEntry_t suite2; + attr.setEntry(PACKAGE_NAME, L"MySuite2"); + suite2.insert(attr); + + attr.setEntry(VENDOR, L"Inc. inc."); + suite2.insert(attr); + + attr.setEntry(ID, suite2Uid.toString()); + suite2.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite2.insert(attr); + + JavaStorageApplicationEntry_t midlet2; + + attr.setEntry(PACKAGE_ID, suite2Uid.toString()); + midlet2.insert(attr); + + Uid midlet2Uid(L"[e22b4588]"); + + attr.setEntry(ID, midlet2Uid.toString()); + midlet2.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite2)); + js->commitTransaction(); + + uidToTUid(suite2Uid, suiteUid); + + // 2. Test version not set. + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + appVersion = entry->Version(); + TAppVersion refVersion2(0, 0, 0); + + CHECK(appVersion.iMajor == refVersion2.iMajor); + CHECK(appVersion.iMinor == refVersion2.iMinor); + CHECK(appVersion.iBuild == refVersion2.iBuild); + + delete entry; + entry = NULL; + + // Clean + js->startTransaction(); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite2)); + js->commitTransaction(); + js->close(); + LOG(EJavaStorage, EInfo, "-TestVersion"); +} + +/** + * Test CJavaRegistryPackageEntry::Version() method. + * 1. Test version set. + * 2. Test version not set. + */ +TEST(TestRegistryPackageEntry, TestVendor) +{ + LOG(EJavaStorage, EInfo, "+TestVendor"); + JavaStorageApplicationEntry_t midlet1; + JavaStorageEntry attr; + + Uid suite1Uid(L"[e22ab577]"); + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet1.insert(attr); + + Uid midlet1Uid(L"[e22ab588]"); + + attr.setEntry(ID, midlet1Uid.toString()); + midlet1.insert(attr); + + js->open(); + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet1)); + + JavaStorageApplicationEntry_t suite1; + attr.setEntry(PACKAGE_NAME, L"MySuite"); + suite1.insert(attr); + + wstring vendor = L"SuiteVendor"; + attr.setEntry(VENDOR, vendor); + suite1.insert(attr); + + attr.setEntry(VERSION, L"0.1"); + suite1.insert(attr); + + attr.setEntry(ID, suite1Uid.toString()); + suite1.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite1.insert(attr); + + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1)); + js->commitTransaction(); + + auto_ptr registry(CJavaRegistry::NewL()); + + // 2. Application suite uid. + TUid suiteUid; + uidToTUid(suite1Uid, suiteUid); + + CJavaRegistryPackageEntry* entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + _LIT(KSuiteVendor, "SuiteVendor"); + CHECK(entry->Vendor() == KSuiteVendor); + + delete entry; + entry = NULL; + + Uid suite2Uid(L"[e22bb577]"); + + JavaStorageApplicationEntry_t suite2; + attr.setEntry(PACKAGE_NAME, L"MySuite2"); + suite2.insert(attr); + + attr.setEntry(ID, suite2Uid.toString()); + suite2.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite2.insert(attr); + + JavaStorageApplicationEntry_t midlet2; + + attr.setEntry(PACKAGE_ID, suite2Uid.toString()); + midlet2.insert(attr); + + Uid midlet2Uid(L"[e22bb588]"); + + attr.setEntry(ID, midlet2Uid.toString()); + midlet2.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite2)); + js->commitTransaction(); + + uidToTUid(suite2Uid, suiteUid); + + // 2. Test version not set. + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + CHECK(entry->Vendor() == KNullDesC); + + delete entry; + entry = NULL; + + // Clean + js->startTransaction(); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite2)); + js->commitTransaction(); + js->close(); + + LOG(EJavaStorage, EInfo, "-TestVendor"); +} + +// Currently not supported +/* +TEST(TestRegistryPackageEntry, TestIsUninstallable) +{ + FAIL("NOT IMPLEMENTED!"); +}*/ + +/** + * Test CJavaRegistryPackageEntry::GetEmbeddedEntries() method. + * 1. Test suite contains one application. + * 2. Test suite contains three applications. + * 3. Test two suites are not interfering each others. + */ +TEST(TestRegistryPackageEntry, TestGetEmbeddedEntries) +{ + LOG(EJavaStorage, EInfo, "+TestGetEmbeddedEntries"); + + JavaStorageApplicationEntry_t midlet1; + JavaStorageEntry attr; + + Uid suite1Uid(L"[e22ba577]"); + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet1.insert(attr); + + Uid midlet1Uid(L"[e22ba588]"); + + attr.setEntry(ID, midlet1Uid.toString()); + midlet1.insert(attr); + + JavaStorageApplicationEntry_t suite1; + attr.setEntry(PACKAGE_NAME, L"MySuite"); + suite1.insert(attr); + + attr.setEntry(ID, suite1Uid.toString()); + suite1.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite1.insert(attr); + + js->open(); + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1)); + js->commitTransaction(); + + // 2. Test suite contains one application. + TUid suiteUid; + uidToTUid(suite1Uid, suiteUid); + + auto_ptr registry(CJavaRegistry::NewL()); + CJavaRegistryPackageEntry* entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + RArray embeddedUids; + entry->GetEmbeddedEntries(embeddedUids); + CHECK(embeddedUids.Count() == 1); + + delete entry; + entry = NULL; + embeddedUids.Reset(); + + Uid suite3Uid(L"[e22baac7]"); + JavaStorageApplicationEntry_t suite3; + attr.setEntry(PACKAGE_NAME, L"MySuite3"); + suite3.insert(attr); + + attr.setEntry(ID, suite3Uid.toString()); + suite3.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite3.insert(attr); + + JavaStorageApplicationEntry_t midlet2; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet2.insert(attr); + + Uid midlet2Uid(L"[e22bacc8]"); + + attr.setEntry(ID, midlet2Uid.toString()); + midlet2.insert(attr); + + JavaStorageApplicationEntry_t midlet3; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet3.insert(attr); + + Uid midlet3Uid(L"[e22baa88]"); + + attr.setEntry(ID, midlet3Uid.toString()); + midlet3.insert(attr); + + JavaStorageApplicationEntry_t midlet4; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet4.insert(attr); + + Uid midlet4Uid(L"[e22baaa8]"); + + attr.setEntry(ID, midlet4Uid.toString()); + midlet4.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + + uidToTUid(suite3Uid, suiteUid); + + // 3. Test suite contains three applications. + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + entry->GetEmbeddedEntries(embeddedUids); + CHECK(embeddedUids.Count() == 3); + + delete entry; + entry = NULL; + embeddedUids.Reset(); + + // 4. Test two suites are not interfering each others. + // Add midlet to suite1 + JavaStorageApplicationEntry_t midlet5; + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet5.insert(attr); + + Uid midlet5Uid(L"[e22bac88]"); + + attr.setEntry(ID, midlet5Uid.toString()); + midlet5.insert(attr); + + js->open(); + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet5)); + // Session must be committed before next use of Registry otherwise + // it is locked. + js->commitTransaction(); + + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + entry->GetEmbeddedEntries(embeddedUids); + CHECK(embeddedUids.Count() == 3); + + delete entry; + entry = NULL; + embeddedUids.Reset(); + + // Clean + js->startTransaction(); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet5)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + js->close(); + LOG(EJavaStorage, EInfo, "-TestGetEmbeddedEntries"); +} +/** + * Test CJavaRegistryPackageEntry::NumberOfEmbeddedEntries() method. + * 1. Test suite contains one application. + * 2. Test suite contains three applications. + * 3. Test two suites are not interfering each others. + */ +TEST(TestRegistryPackageEntry, TestNumberOfEmbeddedEntries) +{ + LOG(EJavaStorage, EInfo, "+TestNumberOfEmbeddedEntries"); + JavaStorageApplicationEntry_t midlet1; + JavaStorageEntry attr; + + Uid suite1Uid(L"[e22ba577]"); + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet1.insert(attr); + + Uid midlet1Uid(L"[e22ba588]"); + + attr.setEntry(ID, midlet1Uid.toString()); + midlet1.insert(attr); + + JavaStorageApplicationEntry_t suite1; + attr.setEntry(PACKAGE_NAME, L"MySuite"); + suite1.insert(attr); + + attr.setEntry(ID, suite1Uid.toString()); + suite1.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite1.insert(attr); + + js->open(); + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1)); + js->commitTransaction(); + + // 1. Test suite contains one application. + TUid suiteUid; + uidToTUid(suite1Uid, suiteUid); + + auto_ptr registry(CJavaRegistry::NewL()); + CJavaRegistryPackageEntry* entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + + CHECK(entry != NULL); + CHECK(entry->NumberOfEmbeddedEntries() == 1); + + delete entry; + entry = NULL; + + Uid suite3Uid(L"[e22baac7]"); + JavaStorageApplicationEntry_t suite3; + attr.setEntry(PACKAGE_NAME, L"MySuite3"); + suite3.insert(attr); + + attr.setEntry(ID, suite3Uid.toString()); + suite3.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite3.insert(attr); + + JavaStorageApplicationEntry_t midlet2; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet2.insert(attr); + + Uid midlet2Uid(L"[e22bacc8]"); + + attr.setEntry(ID, midlet2Uid.toString()); + midlet2.insert(attr); + + JavaStorageApplicationEntry_t midlet3; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet3.insert(attr); + + Uid midlet3Uid(L"[e22baa88]"); + + attr.setEntry(ID, midlet3Uid.toString()); + midlet3.insert(attr); + + JavaStorageApplicationEntry_t midlet4; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet4.insert(attr); + + Uid midlet4Uid(L"[e22baaa8]"); + + attr.setEntry(ID, midlet4Uid.toString()); + midlet4.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + + uidToTUid(suite3Uid, suiteUid); + + // 2. Test suite contains three applications. + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + + CHECK(entry != NULL); + CHECK(entry->NumberOfEmbeddedEntries() == 3); + + delete entry; + entry = NULL; + + // 3. Test two suites are not interfering each others. + // Add midlet to suite1 + JavaStorageApplicationEntry_t midlet5; + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet5.insert(attr); + + Uid midlet5Uid(L"[e22bac88]"); + + attr.setEntry(ID, midlet5Uid.toString()); + midlet5.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet5)); + js->commitTransaction(); + + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + + CHECK(entry != NULL); + CHECK(entry->NumberOfEmbeddedEntries() == 3); + + delete entry; + entry = NULL; + + // Clean + js->startTransaction(); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet5)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + js->close(); + + LOG(EJavaStorage, EInfo, "-TestNumberOfEmbeddedEntries"); +} + +/** + * Test CJavaRegistryPackageEntry::EmbeddedEntryByUidL() method. + * 1. Test suite contains one application. + * 2. Test suite contains three applications. + * 2.1 Test get first entry. + * 2.2 Test get second entry. + * 2.3 Test get thrird entry. + * 3. Test get non existing Uid. + */ +TEST(TestRegistryPackageEntry, TestEmbeddedEntryByUidL) +{ + LOG(EJavaStorage, EInfo, "+TestEmbeddedEntryByUidL"); + JavaStorageApplicationEntry_t midlet1; + JavaStorageEntry attr; + + Uid suite1Uid(L"[e22bac77]"); + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet1.insert(attr); + + Uid midlet1Uid(L"[e22bac88]"); + + attr.setEntry(ID, midlet1Uid.toString()); + midlet1.insert(attr); + + JavaStorageApplicationEntry_t suite1; + attr.setEntry(PACKAGE_NAME, L"MySuite"); + suite1.insert(attr); + + attr.setEntry(ID, suite1Uid.toString()); + suite1.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite1.insert(attr); + + js->open(); + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1)); + js->commitTransaction(); + + // 1. Test suite contains one application. + TUid suiteUid; + uidToTUid(suite1Uid, suiteUid); + + auto_ptr registry(CJavaRegistry::NewL()); + CJavaRegistryPackageEntry* entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + TUid midletUid; + uidToTUid(midlet1Uid, midletUid); + + CJavaRegistryApplicationEntry* appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByUidL(midletUid); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + delete entry; + entry = NULL; + + Uid suite3Uid(L"[e22baad7]"); + JavaStorageApplicationEntry_t suite3; + attr.setEntry(PACKAGE_NAME, L"MySuite3"); + suite3.insert(attr); + + attr.setEntry(ID, suite3Uid.toString()); + suite3.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite3.insert(attr); + + JavaStorageApplicationEntry_t midlet2; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet2.insert(attr); + + Uid midlet2Uid(L"[e22bacd8]"); + + attr.setEntry(ID, midlet2Uid.toString()); + midlet2.insert(attr); + + JavaStorageApplicationEntry_t midlet3; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet3.insert(attr); + + Uid midlet3Uid(L"[e22baad8]"); + + attr.setEntry(ID, midlet3Uid.toString()); + midlet3.insert(attr); + + JavaStorageApplicationEntry_t midlet4; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet4.insert(attr); + + Uid midlet4Uid(L"[e22cccd8]"); + + attr.setEntry(ID, midlet4Uid.toString()); + midlet4.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + + uidToTUid(suite3Uid, suiteUid); + + // 2. Test suite contains three applications. + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + // 2.1. Test get first entry. + uidToTUid(midlet2Uid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByUidL(midletUid); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + // 2.2. Test get second entry. + uidToTUid(midlet3Uid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByUidL(midletUid); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + // 2.3. Test get third entry. + uidToTUid(midlet4Uid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByUidL(midletUid); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + // 4. Test get non existing Uid. + Uid nonExistingUid(L"[e22baddd]"); + uidToTUid(nonExistingUid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByUidL(midletUid); + CHECK(appEntry == NULL); + + delete entry; + entry = NULL; + + // Clean + js->startTransaction(); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + js->close(); + + LOG(EJavaStorage, EInfo, "-TestEmbeddedEntryByUidL"); +} + +/** + * Test CJavaRegistryPackageEntry::EmbeddedEntryByNumberL() method. + * 1. Test suite contains one application. + * 2. Test suite contains three applications. + * 2.1 Test get first entry. + * 2.2 Test get second entry. + * 2.3 Test get thrird entry. + * 3. Test negative index. + * 4. Test index greater than embedded entries. + * + * NOTE: Order is not quaranteed so it might be that test case must be + * changed to check only entry is received but not to check its parameters. + */ +TEST(TestRegistryPackageEntry, TestEmbeddedEntryByNumberL) +{ + LOG(EJavaStorage, EInfo, "+TestEmbeddedEntryByNumberL"); + JavaStorageApplicationEntry_t midlet1; + JavaStorageEntry attr; + + Uid suite1Uid(L"[ed2bac77]"); + + attr.setEntry(PACKAGE_ID, suite1Uid.toString()); + midlet1.insert(attr); + + Uid midlet1Uid(L"[ed2bac88]"); + + attr.setEntry(ID, midlet1Uid.toString()); + midlet1.insert(attr); + + JavaStorageApplicationEntry_t suite1; + attr.setEntry(PACKAGE_NAME, L"MySuite"); + suite1.insert(attr); + + attr.setEntry(ID, suite1Uid.toString()); + suite1.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite1.insert(attr); + + js->open(); + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1)); + js->commitTransaction(); + + // 1. Test suite contains one application. + TUid suiteUid; + uidToTUid(suite1Uid, suiteUid); + + auto_ptr registry(CJavaRegistry::NewL()); + CJavaRegistryPackageEntry* entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + TUid midletUid; + uidToTUid(midlet1Uid, midletUid); + + CJavaRegistryApplicationEntry* appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByNumberL(0); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + delete entry; + entry = NULL; + + Uid suite3Uid(L"[ed2baad7]"); + JavaStorageApplicationEntry_t suite3; + attr.setEntry(PACKAGE_NAME, L"MySuite3"); + suite3.insert(attr); + + attr.setEntry(ID, suite3Uid.toString()); + suite3.insert(attr); + attr.setEntry(MEDIA_ID, L"-124614446"); + suite3.insert(attr); + + JavaStorageApplicationEntry_t midlet2; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet2.insert(attr); + + Uid midlet2Uid(L"[ed2bacd8]"); + + attr.setEntry(ID, midlet2Uid.toString()); + midlet2.insert(attr); + + JavaStorageApplicationEntry_t midlet3; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet3.insert(attr); + + Uid midlet3Uid(L"[ed2baad8]"); + + attr.setEntry(ID, midlet3Uid.toString()); + midlet3.insert(attr); + + JavaStorageApplicationEntry_t midlet4; + + attr.setEntry(PACKAGE_ID, suite3Uid.toString()); + midlet4.insert(attr); + + Uid midlet4Uid(L"[ed2cccd8]"); + + attr.setEntry(ID, midlet4Uid.toString()); + midlet4.insert(attr); + + js->startTransaction(); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->populate(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + + uidToTUid(suite3Uid, suiteUid); + + // 2. Test suite contains three applications. + entry = + (CJavaRegistryPackageEntry*) registry->RegistryEntryL(suiteUid); + CHECK(entry != NULL); + + // 2.1. Test get first entry. + uidToTUid(midlet2Uid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByNumberL(0); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + // 2.2. Test get second entry. + uidToTUid(midlet3Uid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByNumberL(1); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + // 2.3. Test get third entry. + uidToTUid(midlet4Uid, midletUid); + + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByNumberL(2); + CHECK(appEntry != NULL); + + // Test correct one returned. + CHECK(appEntry->Uid() == midletUid); + + delete appEntry; + appEntry = NULL; + + // 3. Test negative index. + TRAPD(err, appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByNumberL(-1)); + CHECK(NULL == appEntry); + + // 4. Test index greater than embedded entries. + appEntry = (CJavaRegistryApplicationEntry*) + entry->EmbeddedEntryByNumberL(3); + CHECK(appEntry == NULL); + + delete entry; + entry = NULL; + + // Clean + js->startTransaction(); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet1)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet2)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet3)); + CHECK(jtu->remove(*js, APPLICATION_TABLE, midlet4)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1)); + CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite3)); + js->commitTransaction(); + js->close(); + + LOG(EJavaStorage, EInfo, "-TestEmbeddedEntryByNumberL"); +}