--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp102.cpp Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,806 @@
+/*
+* Copyright (c) 2005 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:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp102.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_DatabaseUtility.h"
+#include <EPos_CPosLmTextCriteria.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp102::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp102::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::StartL()
+ {
+ _LIT(KDatabase1, "Tp102_Database1.ldb");
+ _LIT(KDatabaseUri1, "file://C:Tp102_Database1.ldb");
+ _LIT(KDatabase1MissingProtocol, "C:Tp102_Database1.ldb");
+ _LIT(KDatabase1MissingDrive, "Tp102_Database1.ldb");
+ _LIT(KDatabase1MissingExtension, "C:Tp102_Database1");
+ _LIT(KDatabase1FullPath, "c:\\private\\100012a5\\DBS_101FE978_Tp102_Database1.ldb");
+ _LIT(KRemoteDatabaseUri, "http://c:eposlm.ldb");
+ _LIT(KDatabase3, "C:Tp102_DBMS_Database3.ldb");
+ _LIT(KDatabaseUri3, "file://C:Tp102_DBMS_Database3.ldb");
+ // Change here if path to private area ever changes
+ _LIT(KDatabase4FullPath, "c:\\private\\100012a5\\DBS_101FE978_Tp102_DefaultDatabase.ldb");
+ _LIT(KDatabase4, "Tp102_DefaultDatabase.ldb");
+ _LIT(KDatabaseUri4, "file://C:Tp102_DefaultDatabase.ldb");
+
+ _LIT(KDatabaseUri5, "file://R:NonExistingDrive.ldb");
+
+#ifdef __WINS__
+ // D on wins
+ _LIT(KDbOnMedia, "D:TP102EPOSLM.LDB");
+ _LIT(KDbOnMediaUri, "file://D:TP102EPOSLM.LDB");
+
+ _LIT(KDbOnMedia2, "D:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2Uri, "file://D:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2MissingDrive, "file://TP102EPOSLM_2.LDB");
+#else
+
+ _LIT(KDbOnMedia, "F:TP102EPOSLM.LDB");
+ _LIT(KDbOnMediaUri, "file://F:TP102EPOSLM.LDB");
+
+ _LIT(KDbOnMedia2, "F:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2Uri, "file://F:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2MissingDrive, "file://TP102EPOSLM_2.LDB");
+#endif
+
+ _LIT(KEmptyURI, "");
+
+ iLog->Log(_L("Warning: this test case requires E: drive"));
+
+ TInt err=KErrNone;
+
+ RemoveAllLmDatabasesL();
+ // Create defaultdb
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+ dbManager->CreateDatabaseL(*dbInfo4);
+ CleanupStack::PopAndDestroy(dbInfo4);
+ dbManager->SetDefaultDatabaseUriL(KDatabase4);
+
+ // 1) Remove all landmark db
+ RemoveAllLmDatabasesL();
+
+ // check the count of databases that could not be delted since they were in use
+ CDesCArray* dbList = dbManager->ListDatabasesLC();
+ TInt count = dbList->Count();
+
+
+ // 2) Verify no *.ldb files on file system
+ VerifyNrOfDatabasesL(count);
+
+ // 3) Check default db
+ HBufC* defaultDbUri;
+ defaultDbUri = dbManager->DefaultDatabaseUriLC();
+
+ // 4) List all database, should return 0
+ VerifyNrOfDatabasesL(count);
+
+ // 5) Check that database does not exist
+ if (dbManager->DatabaseExistsL(KDatabaseUri1))
+ {
+
+ iLog->Log(_L("This database should not exist"));
+ User::Leave(-1);
+ }
+
+ // 6) Create a new database using db api
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+
+ // 7) List dbs, should contain db created in step6
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ if (dbArray->Count() != count+1)
+ {
+ iLog->Log(_L("Database does not contain the last created db"));
+ User::Leave(-1);
+ }
+
+ iLog->Log((*dbArray)[0]);
+ // 8) Check that dabase does not exist
+ if (!dbManager->DatabaseExistsL(KDatabaseUri1))
+ {
+
+ iLog->Log(_L("This database should exist"));
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy(dbArray);
+
+ // 9)
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL(KDatabaseUri1);
+ CleanupStack::PushL(db1);
+ if (db1->IsInitializingNeeded())
+ {
+ iLog->Log(_L("db1->InitializeL"));
+ ExecuteAndDeleteLD(db1->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+
+ // 11) Open the default db
+ CPosLandmarkDatabase* defaultDatabase = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(defaultDatabase);
+
+ iLog->Log(_L("12) List all databases"));
+ // 12) List all databases
+ TInt verifyDbCount = count +2;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri4);
+
+ // 13)
+ iLog->Log(_L("13) Does defaultDB exist"));
+ if (!dbManager->DatabaseExistsL(KDatabaseUri4))
+ {
+
+ iLog->Log(_L("The default database should have been created"));
+ User::Leave(-1);
+ }
+
+ // 14) Try to delete the physical file while db is open
+
+ // Fix this path
+ err = iFileSession.Delete(KDatabase4FullPath);
+ if (err != KErrInUse)
+ {
+
+ iLog->Log(_L("It was possible to delete default db from file system"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(defaultDatabase);
+
+ // 15) Create a landmark database using the DBMS API
+ iLog->Log(_L("15) Create a landmark database using the DBMS API"));
+ FTDatabaseUtility::CreateDatabaseL(KDatabase3);
+ // 16)
+ verifyDbCount = count +3;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri3);
+
+ // 17) Create a database on a removable media
+ iLog->Log(_L("17) Create a database on a removable media"));
+ HPosLmDatabaseInfo* dbInfoMedia = HPosLmDatabaseInfo::NewLC(KDbOnMedia);
+ dbManager->CreateDatabaseL(*dbInfoMedia);
+ CleanupStack::PopAndDestroy(dbInfoMedia);
+
+ // 18) Verify database
+ verifyDbCount = count + 4;
+ VerifyNrOfDatabasesL(verifyDbCount, KDbOnMediaUri);
+
+ // 19) Retrieve the display name for the default db, it should be different from actual the filename
+ iLog->Log(_L("19) Retrieve the display name for the default db, it should be different from actual the filename"));
+ HBufC* defUri = dbManager->DefaultDatabaseUriLC();
+ HPosLmDatabaseInfo* dbInfoReadback = HPosLmDatabaseInfo::NewLC(*defUri);
+ dbManager->GetDatabaseInfoL(*dbInfoReadback);
+ TPosLmDatabaseSettings settings = dbInfoReadback->Settings();
+ TPtrC name1 = settings.DatabaseName();
+ CleanupStack::PopAndDestroy(dbInfoReadback);
+ CleanupStack::PopAndDestroy(defUri);
+
+
+ // 20) Set a new db as default
+ dbManager->SetDefaultDatabaseUriL(KDbOnMediaUri);
+
+ // 21) Retrieve the display name for the new default db, should be the same as in step 19
+ iLog->Log(_L("21) Retrieve the display name for the new default db, should be the same as in step 19"));
+ dbInfoReadback = HPosLmDatabaseInfo::NewLC(KDbOnMediaUri);
+ dbManager->GetDatabaseInfoL(*dbInfoReadback);
+ TPosLmDatabaseSettings settings2 = dbInfoReadback->Settings();
+ TPtrC name2 = settings2.DatabaseName();
+ CleanupStack::PopAndDestroy(dbInfoReadback);
+
+ if (name1.Compare(name2) != 0)
+ {
+ iLog->Log(_L("Names does not match"));
+ User::Leave(-1);
+ }
+
+ _LIT(KFileColonSlashSlash, "file://");
+ _LIT(KCColonSomeTestDbDotLdb, "c:SomeTestDb.ldb");
+ _LIT(KFileColonSlashSlashSomeTestDb2DotLdb, "file://SomeTestDb2.ldb");
+ _LIT(KCColonSomeTestDb3DotDoc, "c:SomeTestDb3.doc");
+ _LIT(KEmptyString, "");
+ _LIT(KFileColonSlahSlashCColonDotLdb, "file://C:.LDB");
+ _LIT(KVeryLongString, "c:\\SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb");
+
+ HPosLmDatabaseInfo* dbInfoFileColonSlashSlash = HPosLmDatabaseInfo::NewLC(KFileColonSlashSlash);
+ HPosLmDatabaseInfo* dbInfoCColonSomeTestDbDotLdb = HPosLmDatabaseInfo::NewLC(KCColonSomeTestDbDotLdb);
+ HPosLmDatabaseInfo* dbInfoFileColonSlashSlashSomeTestDb2DotLdb = HPosLmDatabaseInfo::NewLC(KFileColonSlashSlashSomeTestDb2DotLdb);
+ HPosLmDatabaseInfo* dbInfoCColonSomeTestDb3DotDoc = HPosLmDatabaseInfo::NewLC(KCColonSomeTestDb3DotDoc);
+ HPosLmDatabaseInfo* dbInfoEmptyString = HPosLmDatabaseInfo::NewLC(KEmptyString);
+ HPosLmDatabaseInfo* dbInfoFileColonSlahSlashCColonDotLdb = HPosLmDatabaseInfo::NewLC(KFileColonSlahSlashCColonDotLdb);
+ HPosLmDatabaseInfo* dbInfoVeryLongString = HPosLmDatabaseInfo::NewLC(KVeryLongString);
+
+
+ // 22) Createa db with same name as an existing
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfo1));
+ CleanupStack::PopAndDestroy(dbInfo1);
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("22 Should leave with KErrAlreadyExist"));
+ User::Leave(err);
+ }
+
+ // 23) Create a new database using the db management API with a nonsense URI
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlashSlash));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("23 Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 24) Create a new database using the db management API with a URI specifying a remote database
+ HPosLmDatabaseInfo* dbInfoRem = HPosLmDatabaseInfo::NewLC(KRemoteDatabaseUri);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoRem));
+ CleanupStack::PopAndDestroy(dbInfoRem);
+
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("24 Should leave with KErrNotSupported"));
+ User::Leave(err);
+ }
+
+ // 25) Create a new database using the db management API with a URI with missing protocol
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoCColonSomeTestDbDotLdb));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("25 Should NOT leave"));
+ User::Leave(err);
+ }
+
+ // 26) Create a new database using the db management API with a URI with missing drive
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlashSlashSomeTestDb2DotLdb));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("26 Should NOT leave"));
+ User::Leave(err);
+ }
+
+ // 27) Create a new database using the db management API with a URI that does not end with *.ldb
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoCColonSomeTestDb3DotDoc));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("27 Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 28) Create a new database using the db management API with a URI containing the path to the database file
+ HPosLmDatabaseInfo* dbInfoUri1 = HPosLmDatabaseInfo::NewLC(KDatabaseUri1);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoUri1));
+ CleanupStack::PopAndDestroy(dbInfoUri1);
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("28 Should leave with KErrAlreadyExist"));
+ User::Leave(err);
+ }
+
+ // 29) Create a new database using the db management API with an empty URI
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoEmptyString));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("29 Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 29b) Create a new database using the db management API with an empty URI (containing file://c:.ldb)
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlahSlashCColonDotLdb));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("29b Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 30) Create a new database using the db management API with a URI that is longer than allowed
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoVeryLongString));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L(" Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(dbInfoVeryLongString);
+ CleanupStack::PopAndDestroy(dbInfoFileColonSlahSlashCColonDotLdb);
+ CleanupStack::PopAndDestroy(dbInfoEmptyString);
+ CleanupStack::PopAndDestroy(dbInfoCColonSomeTestDb3DotDoc);
+ CleanupStack::PopAndDestroy(dbInfoFileColonSlashSlashSomeTestDb2DotLdb);
+ CleanupStack::PopAndDestroy(dbInfoCColonSomeTestDbDotLdb);
+ CleanupStack::PopAndDestroy(dbInfoFileColonSlashSlash);
+
+ // 31 Try to delete an existing db
+ dbManager->DeleteDatabaseL(KDatabaseUri1);
+ // 32) Check that it is deleted from file system
+ iLog->Log(_L("Trap error below:"));
+ verifyDbCount = count + 5;
+ TRAP(err, VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("32 Should not be found"));
+ User::Leave(err);
+ }
+
+ // 33) Delete same file again, according to header file, nothing should happen
+ // when the file does not exist
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("33 DeleteDatbaseL, nothing should happen"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("After DeleteDatabaseL"));
+
+ CFileMan* fileMan = NULL;
+ fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+ // 34 Set an existing non-default db to be read-only (attribute found in F32FILE.H)
+ err = fileMan->Attribs(KDatabase1FullPath, KEntryAttReadOnly, KEntryAttNormal, TTime(0));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Attributes could not be changed for KDatabase1FullPath"));
+ User::Leave(err);
+ }
+
+ // 35) Try to delete db with read only
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrAccessDenied)
+ {
+ iLog->Log(_L("35 Err delete of KDatabaseUri1"));
+ User::Leave(err);
+ }
+
+ // Change back to writeable (attribute found in F32FILE.H)
+ err = fileMan->Attribs(KDatabase1FullPath, KEntryAttNormal, KEntryAttReadOnly, TTime(0));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Attributes could not be changed KDatabase1FullPath"));
+ User::Leave(err);
+ }
+
+ // 36) Take a read lock on a db by using a search operation
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KDatabaseUri1);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ iOperation = landmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+
+ // 37) Try to delete db with read lock
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrInUse)
+ {
+ iLog->Log(_L("37) Err delete of Read Locked KDatabaseUri1"));
+ User::Leave(err);
+ }
+
+ ExecuteAndDeleteLD(iOperation);
+
+ // 38) List databases
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+
+ //39) Take a write lock on a db by trying to delete all landmarks operations
+ iOperation = lmd->RemoveAllLandmarksL();
+ // 40) Try to delete db with write lock
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrInUse)
+ {
+ iLog->Log(_L("40) Err delete of Write Locked KDatabaseUri1"));
+ User::Leave(err);
+ }
+
+ ExecuteAndDeleteLD(iOperation);
+
+ // 41) List databases
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ CleanupStack::PopAndDestroy(lmd);
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ // 42) Try to delete a non-existing URI
+ TRAP(err, dbManager->DeleteDatabaseL(_L("c:\\NonsenseURI")));
+ if (err != KErrArgument)
+ {
+
+ iLog->Log(_L("42: Should leave with KErrArgument11"));
+ User::Leave(err);
+ }
+
+ // 43) Try to delete a remote URI
+ TRAP(err, dbManager->DeleteDatabaseL(KRemoteDatabaseUri));
+ if (err!=KErrNotSupported)
+ {
+ iLog->Log(_L("43) Err KRemoteDatabaseUri"));
+ User::Leave(err);
+ }
+
+ // 44) Try to delete a local db specifying URI with missing protocol
+ dbManager->DeleteDatabaseL(KDatabase1MissingProtocol);
+
+ // 45) List databases
+ verifyDbCount = count + 5;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 46) Try to delete a db on removable media excluding drive in URI
+ // Since the DeleteDatabaseL just returns if the db is not found, verify that no db has been removed
+
+ HPosLmDatabaseInfo* dbInfoMedia2 = HPosLmDatabaseInfo::NewLC(KDbOnMedia2);
+ dbManager->CreateDatabaseL(*dbInfoMedia2);
+ CleanupStack::PopAndDestroy(dbInfoMedia2);
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDbOnMedia2Uri);
+ TRAP(err , dbManager->DeleteDatabaseL(KDbOnMedia2MissingDrive));
+
+ if (err != KErrNone)
+ {
+ TBuf<100> buffe;
+ buffe.Format(_L("46) Wrong error when deleting KDbOnMedia2MissingDrive, was %d should be %d"), err, KErrNone);
+
+ iLog->Log(buffe);
+ User::Leave(err);
+ }
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDbOnMedia2Uri);
+
+ // 47) Try to delete a db on c drive excluding drive in URI
+ iLog->Log(_L("47) Try to delete a db on c drive excluding drive in URI"));
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfo1));
+ CleanupStack::PopAndDestroy(dbInfo1);
+ if (err != KErrNone && err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("Problem creating file KDatabase1"));
+ User::Leave(err);
+ }
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabase1MissingDrive));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Wrong errro when deleting file"));
+ User::Leave(err);
+ }
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+ verifyDbCount = count +7;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+
+ // 48) Try to delete a db with URI that does not end with .ldb
+ iLog->Log(_L("48) Try to delete a db with URI that does not end with .ldb"));
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabase1MissingExtension));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("48) Wrong error when deleting KDatabase1MissingExtension"));
+ User::Leave(err);
+ }
+
+ // 49) Try to delete a database with a URI that includes the path to the database
+ iLog->Log(_L("49) Try to delete a database with a URI that includes the path to the database"));
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabase1FullPath));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Wrong error when deleting KDatabase1FullPath"));
+ User::Leave(err);
+ }
+ verifyDbCount = count +7;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 50 Delete with empty URI
+ iLog->Log(_L("50) "));
+ TRAP(err, dbManager->DeleteDatabaseL(KEmptyURI));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Wrong error when deleting KEmptyURI"));
+ User::Leave(err);
+ }
+
+ // 51) Try to delete a db with URI that is longer than allowed
+ iLog->Log(_L("51) "));
+ TRAP(err, dbManager->DeleteDatabaseL(_L("SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Wrong error when deleting long filename file"));
+ User::Leave(err);
+ }
+
+ // 52) Try to delete the existing default db
+ iLog->Log(_L("52) "));
+ dbManager->SetDefaultDatabaseUriL(KDatabase1);
+ dbManager->DeleteDatabaseL(KDatabase1);
+
+ // 53) List databases
+ iLog->Log(_L("53) "));
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 54 Create db on drive that does not exist
+ HPosLmDatabaseInfo* dbInfoUri5 = HPosLmDatabaseInfo::NewLC(KDatabaseUri5);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoUri5));
+ CleanupStack::PopAndDestroy(dbInfoUri5);
+ if (err != KErrNotReady)
+ {
+ iLog->Log(_L("54) Wrong error when creating db on media that does not exist"));
+ User::Leave(err);
+ }
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 55 Delete db on drive that does not exist
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri5));
+ if (err != KErrNotReady)
+ {
+ iLog->Log(_L("55) Wrong error when deleting db on media that does not exist"));
+ User::Leave(err);
+ }
+
+ _LIT(KLongFileName, "file://C:ABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRST.ldb");
+
+ // 56 Create db with long filename
+ HPosLmDatabaseInfo* dbInfoLong = HPosLmDatabaseInfo::NewLC(KLongFileName);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoLong));
+ CleanupStack::PopAndDestroy(dbInfoLong);
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("57) Wrong error when creating db with long filename"));
+ User::Leave(err);
+ }
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 57) Check that database with long filename does not exist
+ if (dbManager->DatabaseExistsL(KLongFileName))
+ {
+ //LogErrorAndLeave(_L("Database with long filename should not exist"));
+ iLog->Log(_L("57) Database with long filename should not exist"));
+ User::Leave(-1);
+ }
+
+ // 58) Check error ESLI-6ARN66, delete a db with strange filename
+ HPosLmDatabaseInfo* dbInfoWeird =
+ HPosLmDatabaseInfo::NewLC(_L("file://c:!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb"));
+ dbManager->CreateDatabaseL(*dbInfoWeird);
+ CleanupStack::PopAndDestroy(dbInfoWeird);
+ verifyDbCount = count +7;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ CleanupStack::PopAndDestroy(dbList);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ TRAP(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone)
+ {
+
+ iLog->Log(_L("RemoveAllLmDatabasesL should not leave with error"));
+ User::Leave(err);
+ }
+
+ TestDifferentUrisL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp102::TestDifferentUrisL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::TestDifferentUrisL()
+ {
+ iLog->Log(_L("TestDifferentUrisL"));
+ _LIT(KDbUri1, "file://:://c:::en helt \" sjuk .ldb databas\".ldb.ldb.ldb");
+ _LIT(KDbUri2, "file://c:en helt sjuk databas.ldb");
+ _LIT(KDbUri3, "file:///c:en helt sjuk databas.ldb");
+ _LIT(KDbUri4, "file://c::en helt sjuk databas.ldb");
+ _LIT(KDbUri5, "file://c:en helt sjuk .ldb databas.ldb");
+ _LIT(KDbUri6, "file://c:en helt sjuk databas.ldb.ldb.ldb");
+ _LIT(KDbUri7, "file://c:en helt \" sjuk databas.ldb");
+ _LIT(KDbUri8, "file://c:en helt < sjuk databas.ldb");
+ _LIT(KDbUri9, "file://c:en helt > sjuk databas.ldb");
+ _LIT(KDbUri10, "file://c:en helt | sjuk databas.ldb");
+ _LIT(KDbUri11, "file://c:en helt / sjuk databas.ldb");
+ _LIT(KDbUri12, "file://c:en helt ? sjuk databas.ldb");
+ _LIT(KDbUri13, "file://c:en helt \\ sjuk databas.ldb");
+ _LIT(KDbUri14, "file://c:en helt : sjuk databas.ldb");
+ // Below tested separately in step 58)
+ //_LIT(KDbUri15, "file://c:!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb");
+ _LIT(KDbUri16, "file://c:qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM.ldb");
+ _LIT(KDbUri17, "file://en otroligt helt sjuk databas.ldb");
+ _LIT(KDbUri18, "c:en helsjuk databas.ldb");
+ _LIT(KDbUri19, "file://c:\\system\\data\\en helt sjuk databas.ldb");
+ _LIT(KDbUri20, "file://c:.ldb");
+ _LIT(KDbUri21, "file://c:filename");
+ _LIT(KDbUri22, "file://c:filename.dip");
+ _LIT(KDbUri23, "file://c:filename. ldb");
+ _LIT(KDbUri24, "file://c:*.ldb");
+ _LIT(KDbUri25, "file://allan:en helt sjuk databas.ldb");
+ _LIT(KDbUri26, "file://g:en helt sjuk databas.ldb");
+ _LIT(KDbUri27, "file://c:filename.ldb");
+ _LIT(KDbUri28, "file://c:012345678901234567890123456789012345678901234567890123456789.ldb");
+
+ const TInt KNrOfUris = 8;
+ const TDesC* listOfUris[] = {&KDbUri2, &KDbUri5, &KDbUri6
+ , &KDbUri16 , &KDbUri17, &KDbUri18
+ , &KDbUri27, &KDbUri28
+ };
+ /* &KDbUri1*/
+
+ const TInt KNrOfNonWorkingUris = 19;
+ const TDesC* listOfUrisNonWorking[] = {&KDbUri1, &KDbUri3 ,&KDbUri4, &KDbUri7, &KDbUri8, &KDbUri9
+ , &KDbUri10, &KDbUri11, &KDbUri12, &KDbUri13, &KDbUri14, &KDbUri19, &KDbUri20, &KDbUri21
+ , &KDbUri22, &KDbUri23, &KDbUri24, &KDbUri25, &KDbUri26};
+
+ TInt errorList[] = {KErrArgument, KErrBadName, KErrBadName, KErrBadName, KErrBadName ,KErrBadName,KErrBadName,
+ KErrBadName, KErrBadName, KErrArgument, KErrBadName, KErrArgument, KErrArgument,
+ KErrArgument, KErrArgument,KErrArgument, KErrBadName, KErrBadName, KErrNotReady};
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ RemoveAllLmDatabasesL();
+ TBuf<100> buf;
+ // get the count of dbs that have notbeen deleted isnce they are in use
+ CDesCArray* dbArray1 = dbManager->ListDatabasesLC();
+ TInt count = dbArray1->Count();
+ TInt verifyDbcount;
+
+ for (TInt i=0;i<KNrOfUris;i++)
+ {
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(*listOfUris[i]);
+ iLog->Log(_L("Creating db:"));
+ iLog->Log(*listOfUris[i]);
+ TRAPD(err, dbManager->CreateDatabaseL(*dbInfo));
+ if (err != KErrNone)
+ {
+ buf.Format(_L("Failed with err %d"), err);
+ iLog->Log(buf);
+ User::Leave(err);
+ }
+ else
+ {
+ iLog->Log(_L("Db created..."));
+ }
+ CleanupStack::PopAndDestroy(dbInfo);
+ verifyDbcount = count + i+1;
+ VerifyNrOfDatabasesL(verifyDbcount);
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+
+ buf.Format(_L("DB count %d"), nr);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(dbArray);
+ }
+
+ for (TInt i=0;i<KNrOfNonWorkingUris;i++)
+ {
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(*listOfUrisNonWorking[i]);
+ iLog->Log(_L("Trying to create db:"));
+ iLog->Log(*listOfUrisNonWorking[i]);
+ TRAPD(err, dbManager->CreateDatabaseL(*dbInfo));
+ if (err != errorList[i])
+ {
+ buf.Format(_L("Failed with err %d should be %d"), err, errorList[i]);
+ iLog->Log(buf);
+
+ iLog->Log(buf);
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(dbInfo);
+ verifyDbcount = count + KNrOfUris;
+ VerifyNrOfDatabasesL(verifyDbcount);
+ }
+
+ CleanupStack::PopAndDestroy(dbArray1);
+ CleanupStack::PopAndDestroy(dbManager);
+ iLog->Log(_L("TestDifferentUrisL"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp102::VerifyNrOfDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::VerifyNrOfDatabasesL(TInt aExpNrOfDatabases, const TDesC& aDatabaseUri)
+ {
+ iLog->Log(_L("VerifyNrOfDatabasesL"));
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+ if (nr != aExpNrOfDatabases)
+ {
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ TBuf<100> buf;
+ buf.Format(_L("Wrong number of databases, was %d, should be %d"), nr, aExpNrOfDatabases);
+
+ iLog->Log(buf);
+ User::Leave(-1);
+ }
+
+ TBool found = EFalse;
+ if (aDatabaseUri != KNullDesC)
+ {
+ for (TInt i=0;i<nr;i++)
+ {
+ iLog->Log((*dbArray)[i]);
+ if ((*dbArray)[i].Compare(aDatabaseUri) == KErrNone)
+ {
+ found = ETrue;
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ if (aDatabaseUri != KNullDesC && !found)
+ {
+ iLog->Log(_L("Database was not found"));
+ User::Leave(KErrNotFound);
+ }
+ }
+
+// End of File