--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimprotocols/phonebooksync/Test/TE_cntsync/te_cntsyncedit.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,995 @@
+// Copyright (c) 2004-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 <e32test.h>
+#include <exterror.h>
+
+#include "te_cntsyncbase.h"
+#include "te_cntsyncedit.h"
+
+_LIT(KModifiedNameInADN, "ADN Modified Name");
+_LIT(KModifiedNameInSDN, "SDN Modified Name");
+_LIT(KModifiedNameInLND, "LND Modified Name");
+_LIT(KModifiedNameInUsim, "Usim Modified Name");
+_LIT(KModifiedNameInFDN, "FDN Modified Name");
+
+_LIT(KModifiedNumberInADN, "05050505050505");
+_LIT(KModifiedNumberInSDN, "15151515151515");
+_LIT(KModifiedNumberInLND, "25252525252525");
+_LIT(KModifiedNumberInUsim,"35353535353535");
+_LIT(KModifiedNumberInFDN, "45454545454545");
+
+_LIT(KModifiedEmailInUsim,"modEmail@moddomain");
+
+_LIT(KModifiedNameExceeded,"ABChfjdhfjhdfjhjfhjdhfjhfjhd");
+_LIT(KModifiedNumberExceeded,"02020300000222222222222222222222220000032232222222222222323");
+
+_LIT(KTestEmpty,"");
+
+_LIT(KModifiedEmptyNameInADN, "ADN Modified Empty");
+_LIT(KModifiedEmptyNameInSDN, "SDN Modified Empty");
+_LIT(KModifiedEmptyNameInLND, "LND Modified Empty");
+_LIT(KModifiedEmptyNameInUsim,"Usim Modified Empty");
+_LIT(KModifiedEmptyNameInFDN, "FDN Modified Empty");
+
+_LIT(KModifiedEmptyNumberInADN, "00000007878");
+_LIT(KModifiedEmptyNumberInSDN, "11111117878");
+_LIT(KModifiedEmptyNumberInLND, "22222227878");
+_LIT(KModifiedEmptyNumberInUsim,"33333337878");
+_LIT(KModifiedEmptyNumberInFDN, "44444447878");
+
+_LIT(KModifiedEmptyEmailInUsim,"modEmptyEmail@modEmptydomain");
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkOpenICCContactTest object
+ */
+CPhbkOpenICCContactTest* CPhbkOpenICCContactTest::NewL()
+ {
+ CPhbkOpenICCContactTest* self = new(ELeave) CPhbkOpenICCContactTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkOpenICCContactTest::CPhbkOpenICCContactTest()
+ {
+ SetTestStepName(_L("OpenICCContactTest"));
+ }
+
+/** Open an ICC entry for edit - normal case */
+enum TVerdict CPhbkOpenICCContactTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+ DoSyncL();
+ // Edited fields are NOT committed to database, hence EFalse
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, EFalse, KModifiedNameInADN, KModifiedNumberInADN);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, EFalse, KModifiedNameInSDN, KModifiedNumberInSDN);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, EFalse, KModifiedNameInLND, KModifiedNumberInLND);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, EFalse, KModifiedNameInUsim, KModifiedNumberInUsim, KModifiedEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, EFalse, KModifiedNameInFDN, KModifiedNumberInFDN);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkOpenContactInvalidUIDTest object
+ */
+CPhbkOpenContactInvalidUIDTest* CPhbkOpenContactInvalidUIDTest::NewL()
+ {
+ CPhbkOpenContactInvalidUIDTest* self = new(ELeave) CPhbkOpenContactInvalidUIDTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkOpenContactInvalidUIDTest::CPhbkOpenContactInvalidUIDTest()
+ {
+ SetTestStepName(_L("OpenContactInvalidUIDTest"));
+ }
+
+/** Open an ICC entry for edit - invalid UID */
+enum TVerdict CPhbkOpenContactInvalidUIDTest::doTestStepL()
+ {
+ TContactItemId id(-7); // Negative UID
+ TRAPD(err, iDb->OpenContactLX(id));
+ TESTCHECKL(err, KErrNotFound);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditICCContactTest object
+ */
+CPhbkEditICCContactTest* CPhbkEditICCContactTest::NewL()
+ {
+ CPhbkEditICCContactTest* self = new(ELeave) CPhbkEditICCContactTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditICCContactTest::CPhbkEditICCContactTest()
+ {
+ SetTestStepName(_L("EditICCContactTest"));
+ }
+
+/** Edit an ICC entry - normal case */
+enum TVerdict CPhbkEditICCContactTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+ DoSyncL();
+ // Edited fields are committed to database, hence ETrue
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedNameInADN, KModifiedNumberInADN);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedNameInSDN, KModifiedNumberInSDN);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedNameInLND, KModifiedNumberInLND);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedNameInUsim, KModifiedNumberInUsim, KModifiedEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedNameInFDN, KModifiedNumberInFDN);
+
+ return TestStepResult();
+ }
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditICCContactTwiceTest object
+ */
+CPhbkEditICCContactTwiceTest* CPhbkEditICCContactTwiceTest::NewL()
+ {
+ CPhbkEditICCContactTwiceTest* self = new(ELeave) CPhbkEditICCContactTwiceTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditICCContactTwiceTest::CPhbkEditICCContactTwiceTest()
+ {
+ SetTestStepName(_L("EditICCContactTwiceTest"));
+ }
+
+/** Edit an ICC entry twice */
+enum TVerdict CPhbkEditICCContactTwiceTest::doTestStepL()
+ {
+ // close existing phbksync session and contact database
+ delete iDb;
+ iDb=NULL;
+ iSession.Close();
+ ConfigurePhbkSyncToIdleL();
+ User::After(3000000); //3 second wait for contact to shut down
+
+ // Mark the heap before re-starting and performing two edits
+ __UHEAP_MARK;
+
+ ConfigurePhbkSyncToFullL();
+ User::LeaveIfError(iSession.Connect());
+ User::After(3000000); //3 second wait for server to start
+ iDb = OpenOrCreateContactDatabaseL();
+ User::After(3000000); //3 second wait for contact to start the phbk server
+ DoSyncL(); // synchronise
+
+ // Edit entry for each phonebook - note these are committed to database, hence ETrue
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedNameInADN, KModifiedNumberInADN);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedNameInSDN, KModifiedNumberInSDN);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedNameInLND, KModifiedNumberInLND);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedNameInUsim, KModifiedNumberInUsim, KModifiedEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedNameInFDN, KModifiedNumberInFDN);
+
+ // Edit same entries again (using different name to ensure entry is changed)
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedEmptyNameInADN, KModifiedNumberInADN);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedEmptyNameInSDN, KModifiedNumberInSDN);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedEmptyNameInLND, KModifiedNumberInLND);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedEmptyNameInUsim, KModifiedNumberInUsim, KModifiedEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedEmptyNameInFDN, KModifiedNumberInFDN);
+
+ // close existing phbksync session and contact database
+ delete iDb;
+ iDb=NULL;
+ iSession.Close();
+ ConfigurePhbkSyncToIdleL();
+ User::After(3000000); //3 second wait for contact to shut down
+
+ // Test the heap is okay
+ __UHEAP_MARKEND;
+ ConfigurePhbkSyncToFullL();
+ User::LeaveIfError(iSession.Connect());
+ User::After(3000000); //3 second wait for server to start
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactEmptyNameTest object
+ */
+CPhbkEditContactEmptyNameTest* CPhbkEditContactEmptyNameTest::NewL()
+ {
+ CPhbkEditContactEmptyNameTest* self = new(ELeave) CPhbkEditContactEmptyNameTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactEmptyNameTest::CPhbkEditContactEmptyNameTest()
+ {
+ SetTestStepName(_L("EditContactEmptyNameTest"));
+ }
+
+/** Edit an ICC entry - empty name field */
+enum TVerdict CPhbkEditContactEmptyNameTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(1);
+ DoSyncL();
+
+ // Edited fields are committed to database, hence ETrue
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 4, ETrue, KTestEmpty, KModifiedNumberInADN);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 4, ETrue, KTestEmpty, KModifiedNumberInSDN);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 4, ETrue, KTestEmpty, KModifiedNumberInLND);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 4, ETrue, KTestEmpty, KModifiedNumberInUsim, KModifiedEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 4, ETrue, KTestEmpty, KModifiedNumberInFDN);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactEmptyNumberTest object
+ */
+CPhbkEditContactEmptyNumberTest* CPhbkEditContactEmptyNumberTest::NewL()
+ {
+ CPhbkEditContactEmptyNumberTest* self = new(ELeave) CPhbkEditContactEmptyNumberTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactEmptyNumberTest::CPhbkEditContactEmptyNumberTest()
+ {
+ SetTestStepName(_L("EditContactEmptyNumberTest"));
+ }
+
+/** Edit an ICC entry - empty number field */
+enum TVerdict CPhbkEditContactEmptyNumberTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(1);
+ DoSyncL();
+
+ // Edited fields are committed to database, hence ETrue
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 3, ETrue, KModifiedNameInADN, KTestEmpty);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 3, ETrue, KModifiedNameInSDN, KTestEmpty);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 3, ETrue, KModifiedNameInLND, KTestEmpty);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 3, ETrue, KModifiedNameInUsim, KTestEmpty, KModifiedEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 3, ETrue, KModifiedNameInFDN, KTestEmpty);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactNameExceededTest object
+ */
+CPhbkEditContactNameExceededTest* CPhbkEditContactNameExceededTest::NewL()
+ {
+ CPhbkEditContactNameExceededTest* self = new(ELeave) CPhbkEditContactNameExceededTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactNameExceededTest::CPhbkEditContactNameExceededTest()
+ {
+ SetTestStepName(_L("EditContactNameExceededTest"));
+ }
+
+/** Edit an ICC entry - name boundary condition exceeded */
+enum TVerdict CPhbkEditContactNameExceededTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+ DoSyncL();
+
+ // Edited fields are committed to database, hence ETrue
+ TRAPD(err, OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedNameExceeded, KModifiedNumberInADN));
+ TESTCHECKL(err, KErrPhonebookTextOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedNameExceeded, KModifiedNumberInSDN));
+ TESTCHECKL(err, KErrPhonebookTextOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedNameExceeded, KModifiedNumberInLND));
+ TESTCHECKL(err, KErrPhonebookTextOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedNameExceeded, KModifiedNumberInUsim, KModifiedEmailInUsim));
+ TESTCHECKL(err, KErrPhonebookTextOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedNameExceeded, KModifiedNumberInFDN));
+ TESTCHECKL(err, KErrPhonebookTextOverflow);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactNumberExceededTest object
+ */
+CPhbkEditContactNumberExceededTest* CPhbkEditContactNumberExceededTest::NewL()
+ {
+ CPhbkEditContactNumberExceededTest* self = new(ELeave) CPhbkEditContactNumberExceededTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactNumberExceededTest::CPhbkEditContactNumberExceededTest()
+ {
+ SetTestStepName(_L("EditContactNumberExceededTest"));
+ }
+
+/** Edit an ICC entry - number boundary condition exceeded */
+enum TVerdict CPhbkEditContactNumberExceededTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+ DoSyncL();
+ // Edited fields are committed to database, hence ETrue
+ TRAPD(err, OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedNameInADN, KModifiedNumberExceeded));
+ TESTCHECKL(err, KErrPhonebookNumberOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedNameInSDN, KModifiedNumberExceeded));
+ TESTCHECKL(err, KErrPhonebookNumberOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedNameInLND, KModifiedNumberExceeded));
+ TESTCHECKL(err, KErrPhonebookNumberOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedNameInUsim, KModifiedNumberExceeded, KModifiedEmailInUsim));
+ TESTCHECKL(err, KErrPhonebookNumberOverflow);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedNameInFDN, KModifiedNumberExceeded));
+ TESTCHECKL(err, KErrPhonebookNumberOverflow);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactICCLockedTest object
+ */
+CPhbkEditContactICCLockedTest* CPhbkEditContactICCLockedTest::NewL()
+ {
+ CPhbkEditContactICCLockedTest* self = new(ELeave) CPhbkEditContactICCLockedTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactICCLockedTest::CPhbkEditContactICCLockedTest()
+ {
+ SetTestStepName(_L("EditContactICCLockedTest"));
+ }
+
+/** Edit an ICC entry - ICC locked */
+enum TVerdict CPhbkEditContactICCLockedTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(2);
+ DoSyncL();
+
+ OpenContactEditLockedL(KUidIccGlobalAdnPhonebook, 4, KModifiedNumberInADN);
+ OpenContactEditLockedL(KUidIccGlobalSdnPhonebook, 4, KModifiedNumberInSDN);
+ OpenContactEditLockedL(KUidIccGlobalLndPhonebook, 4, KModifiedNumberInLND);
+ OpenContactEditLockedL(KUidUsimAppAdnPhonebook, 4, KModifiedNumberInUsim);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactICCWriteFailsTest object
+ */
+CPhbkEditContactICCWriteFailsTest* CPhbkEditContactICCWriteFailsTest::NewL()
+ {
+ CPhbkEditContactICCWriteFailsTest* self = new(ELeave) CPhbkEditContactICCWriteFailsTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactICCWriteFailsTest::CPhbkEditContactICCWriteFailsTest()
+ {
+ SetTestStepName(_L("EditContactICCWriteFailsTest"));
+ }
+
+/** Edit an ICC entry - ICC write fails */
+enum TVerdict CPhbkEditContactICCWriteFailsTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(4);
+ DoSyncL();
+
+ // Edited fields are committed to database, hence ETrue
+ TRAPD(err, OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedNameInADN, KModifiedNumberInADN));
+ TESTCHECKL(err, KErrBadHandle);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedNameInSDN, KModifiedNumberInSDN));
+ TESTCHECKL(err, KErrBadHandle);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedNameInLND, KModifiedNumberInLND));
+ TESTCHECKL(err, KErrBadHandle);
+
+ TRAP(err, OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedNameInUsim, KModifiedNumberInUsim, KModifiedEmailInUsim));
+ TESTCHECKL(err, KErrBadHandle);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedNameInFDN, KModifiedNumberInFDN));
+ TESTCHECKL(err, KErrBadHandle);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditContactEmptyFieldsTest object
+ */
+CPhbkEditContactEmptyFieldsTest* CPhbkEditContactEmptyFieldsTest::NewL()
+ {
+ CPhbkEditContactEmptyFieldsTest* self = new(ELeave) CPhbkEditContactEmptyFieldsTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditContactEmptyFieldsTest::CPhbkEditContactEmptyFieldsTest()
+ {
+ SetTestStepName(_L("EditContactEmptyFieldsTest"));
+ }
+
+/** Open and Edit an ICC entry - empty name and number fields */
+enum TVerdict CPhbkEditContactEmptyFieldsTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(6);
+ DoSyncL();
+
+ // *
+ // * MJH - 12 Sept 2002
+ // * Assumptions for test data:
+ // *
+ // * The fifth entry for each phonebook has no name
+ // * The sixth entry for each phonebook has no number
+ // * The sixth entry for Usim App ADN phonebook has no email
+ // *
+
+ // Edited fields are NOT committed to database, hence EFalse
+ OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 4, EFalse, KModifiedEmptyNameInADN, KModifiedEmptyNumberInADN);
+ OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 4, EFalse, KModifiedEmptyNameInSDN, KModifiedEmptyNumberInSDN);
+ OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 4, EFalse, KModifiedEmptyNameInLND, KModifiedEmptyNumberInLND);
+ OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 4, EFalse, KModifiedEmptyNameInUsim, KModifiedEmptyNumberInUsim, KModifiedEmptyEmailInUsim);
+ OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 4, EFalse, KModifiedEmptyNameInFDN, KModifiedEmptyNumberInFDN);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkEditSlotWriteTest object
+ */
+CPhbkEditSlotWriteTest* CPhbkEditSlotWriteTest::NewL()
+ {
+ CPhbkEditSlotWriteTest* self = new(ELeave) CPhbkEditSlotWriteTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkEditSlotWriteTest::CPhbkEditSlotWriteTest()
+ {
+ SetTestStepName(_L("EditSlotWriteTest"));
+ }
+
+/** Edit entry based on slot number */
+enum TVerdict CPhbkEditSlotWriteTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(21);
+ DoSyncL();
+
+ CheckEditSlotWriteL(KUidIccGlobalAdnPhonebook);
+ CheckEditSlotWriteL(KUidIccGlobalSdnPhonebook);
+ CheckEditSlotWriteL(KUidIccGlobalLndPhonebook);
+ CheckEditSlotWriteL(KUidUsimAppAdnPhonebook);
+ CheckEditSlotWriteL(KUidIccGlobalFdnPhonebook);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkOpenContactICCLockedTest object
+ */
+CPhbkOpenContactICCLockedTest* CPhbkOpenContactICCLockedTest::NewL()
+ {
+ CPhbkOpenContactICCLockedTest* self = new(ELeave) CPhbkOpenContactICCLockedTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkOpenContactICCLockedTest::CPhbkOpenContactICCLockedTest()
+ {
+ SetTestStepName(_L("OpenContactICCLockedTest"));
+ }
+
+/** Open an ICC entry - ICC locked */
+enum TVerdict CPhbkOpenContactICCLockedTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(2);
+ DoSyncL();
+
+ // Access ICC and wait for it to become locked
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ const CContactIdArray* sortedItems = iDb->SortedItemsL();
+ TContactItemId id = (*sortedItems)[0];
+ TInt err(KErrNone);
+ while(err==KErrNone) // Wait for ICC to become locked
+ {
+ User::After(1000000); // Wait a second and try again.
+ CContactICCEntry* failEntry=NULL;
+ TRAP(err, failEntry = (CContactICCEntry*)iDb->ReadContactL(id, *iDb->AllFieldsView())); // Entry unavailable due to ICC being locked
+ delete failEntry;
+ }
+ TESTCHECKL(err, KErrAccessDenied);
+
+ // *
+ // * MJH - 12 Sept 2002
+ // * Assumptions for test data:
+ // *
+ // * Each phonebook has at least five entries
+ // *
+
+ // Edited fields are committed to database, hence ETrue
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 4, ETrue, KModifiedNameInADN, KModifiedNumberInADN));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 4, ETrue, KModifiedNameInSDN, KModifiedNumberInSDN));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 4, ETrue, KModifiedNameInLND, KModifiedNumberInLND));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 4, ETrue, KModifiedNameInUsim, KModifiedNumberInUsim));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 4, ETrue, KModifiedNameInFDN, KModifiedNumberInFDN));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkOpenEntryReadOnlyAccessTest object
+ */
+CPhbkOpenEntryReadOnlyAccessTest* CPhbkOpenEntryReadOnlyAccessTest::NewL()
+ {
+ CPhbkOpenEntryReadOnlyAccessTest* self = new(ELeave) CPhbkOpenEntryReadOnlyAccessTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkOpenEntryReadOnlyAccessTest::CPhbkOpenEntryReadOnlyAccessTest()
+ {
+ SetTestStepName(_L("OpenEntryReadOnlyAccessTest"));
+ }
+
+/* Open an ICC entry - read-only phonebook */
+enum TVerdict CPhbkOpenEntryReadOnlyAccessTest::doTestStepL()
+ {
+ SetSimTsyTestNumberL(12);
+ DoSyncL();
+
+ // *
+ // * MJH - 12 Sept 2002
+ // * Assumptions for test data:
+ // *
+ // * Each phonebook has at least two entries
+ // *
+
+ // Edited fields are committed to database, hence ETrue
+ TRAPD(err, OpenContactEditFieldsL(KUidIccGlobalAdnPhonebook, 0, ETrue, KModifiedNameInADN, KModifiedNumberInADN));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalSdnPhonebook, 0, ETrue, KModifiedNameInSDN, KModifiedNumberInSDN));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalLndPhonebook, 0, ETrue, KModifiedNameInLND, KModifiedNumberInLND));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidUsimAppAdnPhonebook, 0, ETrue, KModifiedNameInUsim, KModifiedNumberInUsim));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ TRAP(err, OpenContactEditFieldsL(KUidIccGlobalFdnPhonebook, 0, ETrue, KModifiedNameInFDN, KModifiedNumberInFDN));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ return TestStepResult();
+ }
+
+
+/**
+ * Replace the current name field with another name
+ * @param aItem Reference to CContactItem
+ * @param aModifiedName New name to use
+ */
+void CPhbkEditIntegrationTestBase::ChangeNameFieldL(CContactItem& aItem, const TDesC& aModifiedName)
+ {
+ CContactItemFieldSet& fieldset = aItem.CardFields();
+ const TInt pos(fieldset.Find(KUidContactFieldFamilyName));
+ CContactItemField& field = fieldset[pos];
+ CContactTextField* textfield = field.TextStorage();
+ textfield->SetTextL(aModifiedName);
+ }
+
+/**
+ * Replace the current number field with another number
+ * @param aItem Reference to CContactItem
+ * @param aModifiedNumber New number to use
+ */
+void CPhbkEditIntegrationTestBase::ChangeNumberFieldL(CContactItem& aItem, const TDesC& aModifiedNumber)
+ {
+ CContactItemFieldSet& fieldset = aItem.CardFields();
+ const TInt pos(fieldset.Find(KUidContactFieldPhoneNumber));
+ CContactItemField& field = fieldset[pos];
+ CContactTextField* textfield = field.TextStorage();
+ textfield->SetTextL(aModifiedNumber);
+ }
+
+/**
+ * Replace the current email field with another email
+ * @param aItem Reference to CContactItem
+ * @param aModifiedEmail New email to use
+ */
+void CPhbkEditIntegrationTestBase::ChangeEmailFieldL(CContactItem& aItem, const TDesC& aModifiedEmail)
+ {
+ CContactItemFieldSet& fieldset = aItem.CardFields();
+ const TInt pos(fieldset.Find(KUidContactFieldEMail));
+ CContactItemField& field = fieldset[pos];
+ CContactTextField* textfield = field.TextStorage();
+ textfield->SetTextL(aModifiedEmail);
+ }
+
+/** Open an ICC contact for edit */
+void CPhbkEditIntegrationTestBase::OpenContactEditFieldsL(TUid aPhonebookUid, TInt aIndex, TBool aCommit, const TDesC& aModifiedName, const TDesC& aModifiedNumber, const TDesC& aModifiedEmail)
+ {
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ // get the unique groupId for the given phonebook
+ TContactItemId groupId(KNullContactId);
+ User::LeaveIfError(iSession.GetPhoneBookId(groupId,
+ RPhoneBookSession::ESyncGroupId,
+ aPhonebookUid));
+ TESTCHECKCONDITIONL(groupId != KNullContactId);
+
+ // based on the groupId, get items belonging to the phonebook
+ CContactGroup* group = NULL;
+ TRAPD(err, group = static_cast<CContactGroup*>(iDb->ReadContactL(groupId)));
+ TESTCHECKL(err, KErrNone);
+ CleanupStack::PushL(group);
+ const CContactIdArray* array = group->ItemsContained();
+
+ // Obtain the UID for the indexed entry
+ TContactItemId id = (*array)[aIndex];
+
+ // Open the entry and attempt to edit
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(id));
+ CleanupStack::PushL(entry);
+ ChangeNumberFieldL(*entry,aModifiedNumber);
+ ChangeNameFieldL(*entry,aModifiedName);
+ if (aPhonebookUid == KUidUsimAppAdnPhonebook)
+ ChangeEmailFieldL(*entry,aModifiedEmail);
+
+ // Commit to database if required
+ if (aCommit)
+ iDb->CommitContactL(*entry);
+ else
+ iDb->CloseContactL(id);
+
+ CleanupStack::PopAndDestroy(3); // group, entry & lockrecord
+ }
+
+/** Open an ICC contact - edit is locked */
+void CPhbkEditIntegrationTestBase::OpenContactEditLockedL(TUid aPhonebookUid, TInt aIndex, const TDesC& aModifiedNumber)
+ {
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ // get the unique groupId for the given phonebook
+ TContactItemId groupId(KNullContactId);
+ User::LeaveIfError(iSession.GetPhoneBookId(groupId,
+ RPhoneBookSession::ESyncGroupId,
+ aPhonebookUid));
+ TESTCHECKCONDITIONL(groupId != KNullContactId);
+
+ const CContactIdArray* sortedItems = iDb->SortedItemsL();
+ TContactItemId id = (*sortedItems)[0];
+ TInt error(KErrAccessDenied);
+ while (error==KErrAccessDenied || error==KErrNotReady || error==KErrNotFound) // Wait for ICC to become unlocked again
+ {
+ User::After(1000000); // Wait a second and try again.
+ CContactICCEntry* failEntry=NULL;
+ TRAP(error, failEntry = (CContactICCEntry*)iDb->ReadContactL(id, *iDb->AllFieldsView())); // Entry unavailable due to ICC being locked
+ delete failEntry;
+ }
+ TESTCHECKL(error, KErrNone);
+
+ WaitForSyncToCompleteL();
+
+ // based on the groupId, get items belonging to the phonebook
+ CContactGroup* group = NULL;
+ TRAPD(err, group = static_cast<CContactGroup*>(iDb->ReadContactL(groupId)));
+ TESTCHECKL(err, KErrNone);
+ CleanupStack::PushL(group);
+ const CContactIdArray* array = group->ItemsContained();
+
+ // Obtain the UID for the indexed entry
+ TContactItemId id2 = (*array)[aIndex];
+
+ // Open the entry
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(id2));
+ CleanupStack::PushL(entry);
+
+ while(error==KErrNone) // Wait for ICC to become locked again
+ {
+ User::After(1000000); // Wait a second and try again.
+ CContactICCEntry* failEntry=NULL;
+ TRAP(error, failEntry = (CContactICCEntry*)iDb->ReadContactL(id, *iDb->AllFieldsView())); // Entry unavailable due to ICC being locked
+ delete failEntry;
+ }
+ TESTCHECKCONDITIONL(error==KErrAccessDenied || error==KErrNotReady);
+
+ ChangeNumberFieldL(*entry, aModifiedNumber);
+ TRAP(err, iDb->CommitContactL(*entry));
+ TESTCHECKL(err, KErrAccessDenied);
+
+ CleanupStack::PopAndDestroy(3); // group, entry & lockrecord
+ }
+
+/** Check edit based on slot number */
+void CPhbkEditIntegrationTestBase::CheckEditSlotWriteL(const TUid aPhonebook)
+ {
+ TInt aSlot;
+ TContactItemId aId=KNullContactId;
+ CPhbkIntegrationTestUtility* add = CPhbkIntegrationTestUtility::NewL();
+ _LIT(Kslot17,"17");
+ _LIT(Kslot18,"18");
+
+ //test add new contact at specified slot
+ TInt matchingId;
+ aSlot=17;
+ TInt err = iSession.GetSlotId(aSlot, aId, aPhonebook);
+ TESTCHECKL(err, KErrNotFound);
+
+ add->AddContactL(KTestName,KTestNumber,Kslot17, aPhonebook, KTestEMail);
+ err = iSession.GetSlotId(aSlot, aId, aPhonebook);
+ TESTCHECKL(err, KErrNone);
+ matchingId=aId;
+
+ //edit slot number
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(aId));
+ CleanupStack::PushL(entry);
+
+ CContactItemFieldSet& fieldset = entry->CardFields();
+ const TInt pos(fieldset.Find(KUidContactFieldICCSlot));
+ CContactItemField& field = fieldset[pos];
+ CContactTextField* textfield = field.TextStorage();
+ textfield->SetTextL(Kslot18);
+ iDb->CommitContactL(*entry);
+ CleanupStack::PopAndDestroy(2);
+
+ //check slot 17 is empty
+ err = iSession.GetSlotId(aSlot, aId, aPhonebook);
+ TESTCHECKL(err, KErrNotFound);
+
+ //check slot 18 is not empty
+ aSlot=18;
+ err = iSession.GetSlotId(aSlot, aId, aPhonebook);
+ TESTCHECKL(err, KErrNone);
+ TESTCHECKL(aId, matchingId);
+
+ delete add;
+ }
+
+/********************* STRESS TESTS ************************************/
+
+/**
+ * Factory construction method.
+ * @return Pointer to CPhbkOpenFullICCTest object
+ */
+CPhbkOpenFullICCTest* CPhbkOpenFullICCTest::NewL()
+ {
+ CPhbkOpenFullICCTest* self = new(ELeave) CPhbkOpenFullICCTest();
+ return self;
+ }
+
+/**
+ * Default constructor. Each test step initialises it's own name.
+ */
+CPhbkOpenFullICCTest::CPhbkOpenFullICCTest()
+ {
+ SetTestStepName(_L("OpenFullICCTest"));
+ }
+
+/** Open and close each ICC entry in a full phonebook */
+enum TVerdict CPhbkOpenFullICCTest::doTestStepL()
+ {
+ // Global ADN Phonebook
+ SetSimTsyTestNumberL(131);
+
+ TRequestStatus status;
+ iSession.DoSynchronisation(status);
+ User::WaitForRequest(status);
+ TESTCHECKL(status.Int(), KErrNone);
+
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ // get the unique groupId for the given phonebook
+ TContactItemId groupId(KNullContactId);
+ User::LeaveIfError(iSession.GetPhoneBookId(groupId,
+ RPhoneBookSession::ESyncGroupId,
+ KUidIccGlobalAdnPhonebook));
+ TESTCHECKCONDITIONL(groupId != KNullContactId);
+
+ // based on the groupId, get items belonging to the phonebook
+ CContactGroup* group = NULL;
+ TRAPD(err, group = static_cast<CContactGroup*>(iDb->ReadContactL(groupId)));
+ TESTCHECKL(err, KErrNone);
+ CleanupStack::PushL(group);
+ const CContactIdArray* array = group->ItemsContained();
+
+ TInt count(array->Count());
+ TESTCHECKL(count, KTest13ICCSlotsADN);
+ TInt i;
+
+ for(i=0; i<count; ++i)
+ {
+ TContactItemId id = (*array)[i];
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(id));
+ CleanupStack::PushL(entry);
+ ChangeNameFieldL(*entry,KModifiedName);
+ iDb->CloseContactL(id);
+ CleanupStack::PopAndDestroy(2); //entry+lockrecord
+ }
+ CleanupStack::PopAndDestroy(); // group
+
+ // Global SDN Phonebook
+ SetSimTsyTestNumberL(132);
+
+ iSession.DoSynchronisation(status, KUidIccGlobalSdnPhonebook);
+ User::WaitForRequest(status);
+ TESTCHECKL(status.Int(), KErrNone);
+
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ // get the unique groupId for the given phonebook
+ User::LeaveIfError(iSession.GetPhoneBookId(groupId,
+ RPhoneBookSession::ESyncGroupId,
+ KUidIccGlobalSdnPhonebook));
+ TESTCHECKCONDITIONL(groupId != KNullContactId);
+
+ // based on the groupId, get items belonging to the phonebook
+ TRAP(err, group = static_cast<CContactGroup*>(iDb->ReadContactL(groupId)));
+ TESTCHECKL(err, KErrNone);
+ CleanupStack::PushL(group);
+ array = group->ItemsContained();
+
+ count = array->Count();
+ TESTCHECKL(count, KTest13ICCSlotsSDN);
+
+ for(i=0; i<count; ++i)
+ {
+ TContactItemId id = (*array)[i];
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(id));
+ CleanupStack::PushL(entry);
+ ChangeNameFieldL(*entry,KModifiedName);
+ iDb->CloseContactL(id);
+ CleanupStack::PopAndDestroy(2); //entry+lockrecord
+ }
+ CleanupStack::PopAndDestroy(); // group
+
+ // Global LND Phonebook
+ SetSimTsyTestNumberL(133);
+
+ iSession.DoSynchronisation(status, KUidIccGlobalLndPhonebook);
+ User::WaitForRequest(status);
+ TESTCHECKL(status.Int(), KErrNone);
+
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ // get the unique groupId for the given phonebook
+ User::LeaveIfError(iSession.GetPhoneBookId(groupId,
+ RPhoneBookSession::ESyncGroupId,
+ KUidIccGlobalLndPhonebook));
+ TESTCHECKCONDITIONL(groupId != KNullContactId);
+
+ // based on the groupId, get items belonging to the phonebook
+ TRAP(err, group = static_cast<CContactGroup*>(iDb->ReadContactL(groupId)));
+ TESTCHECKL(err, KErrNone);
+ CleanupStack::PushL(group);
+ array = group->ItemsContained();
+
+ count = array->Count();
+ TESTCHECKL(count, KTest13ICCSlotsLND);
+
+ for(i=0; i<count; ++i)
+ {
+ TContactItemId id = (*array)[i];
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(id));
+ CleanupStack::PushL(entry);
+ ChangeNameFieldL(*entry,KModifiedName);
+ iDb->CloseContactL(id);
+ CleanupStack::PopAndDestroy(2); //entry+lockrecord
+ }
+ CleanupStack::PopAndDestroy(); // group
+
+ // Usim App Phonebook
+ SetSimTsyTestNumberL(134);
+
+ iSession.DoSynchronisation(status, KUidUsimAppAdnPhonebook);
+ User::WaitForRequest(status);
+ TESTCHECKL(status.Int(), KErrNone);
+
+ iDb->SetDbViewContactType(KUidContactICCEntry);
+ // get the unique groupId for the given phonebook
+ User::LeaveIfError(iSession.GetPhoneBookId(groupId,
+ RPhoneBookSession::ESyncGroupId,
+ KUidUsimAppAdnPhonebook));
+ TESTCHECKCONDITIONL(groupId != KNullContactId);
+
+ // based on the groupId, get items belonging to the phonebook
+ TRAP(err, group = static_cast<CContactGroup*>(iDb->ReadContactL(groupId)));
+ TESTCHECKL(err, KErrNone);
+ CleanupStack::PushL(group);
+ array = group->ItemsContained();
+
+ count = array->Count();
+ TESTCHECKL(count, KTest13ICCSlotsUsim);
+
+ for(i=0; i<count; ++i)
+ {
+ TContactItemId id = (*array)[i];
+ CContactICCEntry* entry = static_cast<CContactICCEntry*>(iDb->OpenContactLX(id));
+ CleanupStack::PushL(entry);
+ ChangeNameFieldL(*entry,KModifiedName);
+ iDb->CloseContactL(id);
+ CleanupStack::PopAndDestroy(2); //entry+lockrecord
+ }
+ CleanupStack::PopAndDestroy(); // group
+
+ return TestStepResult();
+ }
+