diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrentry/tsrc/ut_mrentry/src/ut_cesmrmeetingrequestentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrentry/tsrc/ut_mrentry/src/ut_cesmrmeetingrequestentry.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -0,0 +1,624 @@ +/* +* Copyright (c) 2008-2008 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: MR Entry unit and module tests +* Version : %version: e002sa33#3 % +* +* Copyright ? 2008-2008 Nokia. All rights reserved. +*/ + + +#include "ut_cesmrmeetingrequestentry.h" + + +// SYSTEM INCLUDES +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// USER INCLUDES +#include "cesmrmeetingrequestentry.h" +#include "cesmrcaldbmgr.h" +#include "esmrentryhelper.h" + + + +// CONSTANTS + +// LOCAL DEFINITIONS + +namespace { + +// Default Calendar database path "Calendar_test");// +_LIT( KCalendarDatabaseFilePath, "c:Calendar_test" ); + + +_LIT( KUser1, "foo1@bar.com" ); +_LIT( KUser2, "foo2@bar.com" ); +_LIT( KUser3, "foo3@bar.com" ); +_LIT( KUser4, "foo4@bar.com" ); +_LIT( KUser5, "foo5@bar.com" ); +_LIT( KUser6, "foo6@bar.com" ); +_LIT( KOrg, "foo7@bar.com"); +_LIT( KAtOrg, "cayenne2@digia.com"); + + +CCalEntry* CreateEntryL( CCalEntry::TType aType, + TCalTime aStartCalTime, + TCalTime aEndCalTime ) + { + CCalenInterimUtils2* utils = CCalenInterimUtils2::NewL(); + CleanupStack::PushL( utils ); + // Create unique ID. + HBufC8* guid = utils->GlobalUidL(); + CleanupStack::PushL(guid); + CCalEntry* entry = CCalEntry::NewL( aType, guid, CCalEntry::EMethodNone, 0 ); + CleanupStack::Pop( guid ); + CleanupStack::PushL( entry ); + + //TEST DATA + TDateTime start = aStartCalTime.TimeLocalL().DateTime(); + TDateTime end = aEndCalTime.TimeLocalL().DateTime(); + + entry->SetStartAndEndTimeL( aStartCalTime, aEndCalTime ); + CleanupStack::Pop( entry ); + CleanupStack::PopAndDestroy( utils ); + + return entry; + } + +CCalAttendee* CreateAttendeeLC( const TDesC& aAddress, CCalAttendee::TCalRole aRole ) + { + CCalAttendee* attendee = CCalAttendee::NewL(aAddress); + CleanupStack::PushL(attendee); + attendee->SetRoleL(aRole); + + return attendee; + } + +CCalAttendee* SetAttendeeLC( CCalEntry& aEntry, const TDesC& aAddress, CCalAttendee::TCalRole aRole ) + { + CCalAttendee* attendee = CreateAttendeeLC( aAddress, aRole ); + aEntry.AddAttendeeL( attendee ); + + return attendee; + } + + +} //namespace + +// - Construction ------------------------------------------------------------ + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntryImpl::NewL +// --------------------------------------------------------------------------- +// +UT_CESMRMeetingRequestEntry* UT_CESMRMeetingRequestEntry::NewL() + { + UT_CESMRMeetingRequestEntry* self = UT_CESMRMeetingRequestEntry::NewLC(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::NewLC +// --------------------------------------------------------------------------- +// +UT_CESMRMeetingRequestEntry* UT_CESMRMeetingRequestEntry::NewLC() + { + UT_CESMRMeetingRequestEntry* self = new( ELeave ) UT_CESMRMeetingRequestEntry(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::~UT_CESMRMeetingRequestEntry +// --------------------------------------------------------------------------- +// +UT_CESMRMeetingRequestEntry::~UT_CESMRMeetingRequestEntry() + { + delete iMRMailboxUtils; iMRMailboxUtils = NULL; + delete iEntry; iEntry = NULL; + delete iCtrlSyncher; iCtrlSyncher = NULL; + delete iCalDbMgr; iCalDbMgr = NULL; + delete iCalSession; iCalSession = NULL; + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::UT_CESMRMeetingRequestEntry +// --------------------------------------------------------------------------- +// +UT_CESMRMeetingRequestEntry::UT_CESMRMeetingRequestEntry() + { + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::ConstructL +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::ConstructL() + { + CEUnitTestSuiteClass::ConstructL(); + + } + + +// - Utility functions ----------------------------------------------------------- + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::SetupL +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::SetupL() + { + // Creating mailbox utils + iMRMailboxUtils = CMRMailboxUtils::NewL( NULL ); + + // Creating calSession to calendar database + iCalSession = CCalSession::NewL(); + + TRAP_IGNORE( iCalSession->DeleteCalFileL( KCalendarDatabaseFilePath )); + + TRAPD( err, iCalSession->OpenL( KCalendarDatabaseFilePath )); + if ( err == KErrNotFound ) + { + iCalSession->CreateCalFileL( KCalendarDatabaseFilePath ); + iCalSession->OpenL( KCalendarDatabaseFilePath ); + } + else + { + User::LeaveIfError( err ); + } + + iCalDbMgr = CESMRCalDbMgr::NewL( *iCalSession, *this ); + + iConflictsExists = EFalse; + + ExecuteL(); + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::Teardown +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::Teardown() + { + delete iMrEntry; iMrEntry = NULL; + delete iMRMailboxUtils; iMRMailboxUtils = NULL; + delete iEntry; iEntry = NULL; + delete iCtrlSyncher; iCtrlSyncher = NULL; + delete iCalDbMgr; iCalDbMgr = NULL; + delete iCalSession; iCalSession = NULL; + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::CreateCalEntryL +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::CreateCalEntryL() + { + TTime time; + time.HomeTime(); + TCalTime initialCalTime; initialCalTime.SetTimeLocalL( time ); + TTimeIntervalHours hour( 1 ); + TCalTime initialCalEndTime; time += hour; initialCalEndTime.SetTimeLocalL( time ); + + iEntry = CreateEntryL( CCalEntry::EAppt, initialCalTime, initialCalEndTime ); + + // Location + _LIT( KLocation, "Meeting Room data 123" ); + iEntry->SetLocationL( KLocation() ); + // Method for 'remove from cal' option test + // iEntry->SetMethodL( CCalEntry::EMethodCancel ); + + // Description + _LIT( KDesc, "Description field data" ); + iEntry->SetDescriptionL( KDesc() ); + + // Subject + _LIT( KSummary, "Summary field data" ); + iEntry->SetSummaryL( KSummary() ); + + // Setting alarm + CCalAlarm* alarm = CCalAlarm::NewL(); + TTimeIntervalMinutes offset(60); + alarm->SetTimeOffset( offset ); + iEntry->SetAlarmL( alarm ); + delete alarm; alarm = NULL; + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::CalEntryL +// --------------------------------------------------------------------------- +// +CCalEntry* UT_CESMRMeetingRequestEntry::CCalEntryL() + { + TTime time; + time.HomeTime(); + TCalTime initialCalTime; initialCalTime.SetTimeLocalL( time ); + TTimeIntervalHours hour( 1 ); + TCalTime initialCalEndTime; time += hour; initialCalEndTime.SetTimeLocalL( time ); + + CCalEntry* entry = CreateEntryL( CCalEntry::EAppt, initialCalTime, initialCalEndTime ); + + // Location + _LIT( KLocation, "Meeting Room data 123" ); + entry->SetLocationL( KLocation() ); + + // Description + _LIT( KDesc, "Description field data" ); + entry->SetDescriptionL( KDesc() ); + + // Subject + _LIT( KSummary, "Summary field data" ); + entry->SetSummaryL( KSummary() ); + + // Setting alarm + CCalAlarm* alarm = CCalAlarm::NewL(); + TTimeIntervalMinutes offset(60); + alarm->SetTimeOffset( offset ); + entry->SetAlarmL( alarm ); + delete alarm; alarm = NULL; + + return entry; + } + + +// ----------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::HandleCalEngStatus +// ----------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::HandleCalEngStatus( TMRUtilsCalEngStatus /*aStatus*/ ) + { + if ( iCtrlSyncher->CanStopNow() ) + { + iCtrlSyncher->AsyncStop(); + } + } + +// ----------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::HandleOperation +// ----------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::HandleOperation( + TInt /*aType*/, + TInt /*aPercentageCompleted*/, + TInt /*aStatus*/ ) + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::ExecuteL +// ----------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::ExecuteL() + { + iExecutionError = KErrNone; + + iCtrlSyncher = new (ELeave) CActiveSchedulerWait; + + iCtrlSyncher->Start(); + } + +// ----------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::CreateMREntryL +// ----------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::CreateMREntryL() + { + iMrEntry = CESMRMeetingRequestEntry::NewL( + *iEntry, + *iMRMailboxUtils, + *iCalDbMgr, + iConflictsExists, + NULL ); + } + +// - Test methods ----------------------------------------------------------- + + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::T_Global_CESMRMeetingRequestEntry_NewL +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::T_Global_CESMRMeetingRequestEntry_NewL() + { + CreateCalEntryL(); // Creating iEntry + + iMrEntry = CESMRMeetingRequestEntry::NewL( + *iEntry, + *iMRMailboxUtils, + *iCalDbMgr, + iConflictsExists, + NULL ); + + EUNIT_ASSERT_DESC( iMrEntry, "CESMRMeetingRequestEntry::NewL failed" ); + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::T_ValidateEntryL_1 +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::T_ValidateEntryL_1() + { + // entry1 = Normal once occuring entry + CCalEntry* entry1 = CCalEntryL(); + + // Saving entry to caldb + MESMRCalDbMgr& mgr = *iCalDbMgr; + mgr.StoreEntryL( *entry1, ETrue ); + + iEntry = entry1; //ownership transfered to iEntry + + CreateMREntryL(); + CCalEntry* validatedEntry1 = iMrEntry->ValidateEntryL(); + + TCalLocalUid entry1uid = entry1->LocalUidL(); + TCalLocalUid validateuid = validatedEntry1->LocalUidL(); + +/* + EUNIT_ASSERT_DESC( validateuid == entry1uid, + "Entry1 local uid should be the same as validated entrys!" ); +*/ + + EUNIT_ASSERT_DESC( validatedEntry1->UidL() == entry1->UidL(), + "Entry1 local uid should be the same as validated entrys!" ); + + EUNIT_ASSERT_DESC( validatedEntry1->RecurrenceIdL().TimeLocalL() == + entry1->RecurrenceIdL().TimeLocalL(), + "Entry1 recurrence id should be the same as validated entrys!" ); + + + delete validatedEntry1; validatedEntry1 = NULL; + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::T_ValidateEntryL_2 +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::T_ValidateEntryL_2() + { + // entry2 = recurring entry + CCalEntry* entry2 = CCalEntryL(); + + // Adjusting entry2 start and end time + TCalTime newStartTime; + TCalTime newEndTime; + TTime newStart = entry2->StartTimeL().TimeLocalL() + TTimeIntervalDays(10); + TTime newEnd = entry2->EndTimeL().TimeLocalL() + TTimeIntervalDays(10); + newStartTime.SetTimeLocalL( newStart ); + newEndTime.SetTimeLocalL( newEnd ); + entry2->SetStartAndEndTimeL( newStartTime , newEndTime ); + + // Adding recurrence to entry2 + TCalTime meetingStartTime = entry2->StartTimeL(); + TCalRRule rRule; + rRule.SetType( TCalRRule::EDaily ); + rRule.SetCount( 5 ); + rRule.SetDtStart( meetingStartTime ); + entry2->SetRRuleL( rRule ); + + // Saving entries to caldb + MESMRCalDbMgr& mgr = *iCalDbMgr; + mgr.StoreEntryL( *entry2, ETrue ); + + // If all went well, entry2 has been saved to db correctly, so let's use that + iEntry = entry2; // ownership transfered + + // Creating iMrEntry based on this modifying entry + CreateMREntryL(); + + iMrEntry->SetModifyingRuleL( MESMRCalEntry::EESMRThisOnly ); + + CCalEntry* validatedEntry2 = iMrEntry->ValidateEntryL(); + + // Verification + if( validatedEntry2->EntryTypeL() != iEntry->EntryTypeL() ) + { + EUNIT_FAIL_TEST( "Validated entrys type has changed!" ); + } + else if( validatedEntry2->UidL().Compare( iEntry->UidL() )) + { + EUNIT_FAIL_TEST( "Validated entrys uid is no longer the original one!" ); + } + else if ( validatedEntry2->LocalUidL() != 0 ) + { + EUNIT_FAIL_TEST( "Validated entrys local uid is not zero!" ); + } + else if ( validatedEntry2->SequenceNumberL() != 0 ) + { + EUNIT_FAIL_TEST( "Validated entrys sequence number is not zero!" ); + } + else if( validatedEntry2->SummaryL().Compare( iEntry->SummaryL() )) + { + EUNIT_FAIL_TEST( "Validated entrys summary is no longer the original one!" ); + } + else if ( validatedEntry2->RecurrenceRangeL() != CalCommon::EThisOnly ) + { + EUNIT_FAIL_TEST( "Validated entrys recurrence range is not EThisOnly!" ); + } + else if ( validatedEntry2->StartTimeL().TimeLocalL() != iEntry->StartTimeL().TimeLocalL() ) + { + EUNIT_FAIL_TEST( "Validated entrys start time has changed from original!" ); + } + else + { + EUNIT_ASSERT_DESC( validatedEntry2, "Enrty validated correctly" ) + } + + delete validatedEntry2; validatedEntry2 = NULL; + } + + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::T_EntryAttendeeInfoL +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::T_EntryAttendeeInfoL() + { + CreateCalEntryL(); // Creating iEntry + + CCalAttendee* organizer = CreateAttendeeLC( KAtOrg(), CCalAttendee::EChair ); + iEntry->SetOrganizerL( organizer ); + iEntry->SetPhoneOwnerL( organizer ); + CleanupStack::Pop( organizer ); + + SetAttendeeLC( *iEntry, KUser1(), CCalAttendee::EReqParticipant ); + CleanupStack::Pop(); + + SetAttendeeLC( *iEntry, KUser2(), CCalAttendee::EReqParticipant ); + CleanupStack::Pop(); + + SetAttendeeLC( *iEntry, KUser3(), CCalAttendee::EReqParticipant ); + CleanupStack::Pop(); + + SetAttendeeLC( *iEntry, KUser4(), CCalAttendee::EOptParticipant ); + CleanupStack::Pop(); + + SetAttendeeLC( *iEntry, KUser5(), CCalAttendee::EOptParticipant ); + CleanupStack::Pop(); + + SetAttendeeLC( *iEntry, KUser6(), CCalAttendee::EOptParticipant ); + CleanupStack::Pop(); + + CCalUser* phoneOwner = iEntry->PhoneOwnerL(); + CCalUser* org = iEntry->OrganizerL(); + + CreateMREntryL(); // Creating iMrEntry + // Test data + TESMRRole role = iMrEntry->RoleL(); + + // When entry is organizer, attendee info should leave with KErrNotSupported + //EUNIT_ASSERT_SPECIFIC_LEAVE( iMrEntry->EntryAttendeeInfoL(), KErrNotSupported ); + delete iMrEntry; iMrEntry = NULL; + + // PhoneOwner is set different than organizer, so that AttendeeInfo gives valid value + CCalAttendee* attendee = SetAttendeeLC( *iEntry, KUser1(), CCalAttendee::EReqParticipant ); + iEntry->SetPhoneOwnerL( attendee ); + CleanupStack::Pop( attendee ); + + // Setting entry to occure in the past so that return value is EESMREntryInfoOccursInPast + TCalTime newStartTime; + TCalTime newEndTime; + TTime newStart = iEntry->StartTimeL().TimeLocalL() - TTimeIntervalDays(10); + TTime newEnd = iEntry->EndTimeL().TimeLocalL() - TTimeIntervalDays(10); + newStartTime.SetTimeLocalL( newStart ); + newEndTime.SetTimeLocalL( newEnd ); + iEntry->SetStartAndEndTimeL( newStartTime , newEndTime ); + + CreateMREntryL(); // Creating iMrEntry + // Test data + role = iMrEntry->RoleL(); + + MESMRMeetingRequestEntry::TESMREntryInfo attendeeInfo = iMrEntry->EntryAttendeeInfoL(); + + EUNIT_ASSERT_DESC( attendeeInfo == MESMRMeetingRequestEntry::EESMREntryInfoOccursInPast, + "Entrys attendee info should be EESMREntryInfoOccursInPast" ); + + } + +// --------------------------------------------------------------------------- +// UT_CESMRMeetingRequestEntry::T_GetRecurrenceL +// --------------------------------------------------------------------------- +// +void UT_CESMRMeetingRequestEntry::T_GetRecurrenceL() + { + CreateCalEntryL(); // Creating iEntry + + // Setting recurrence + TCalTime meetingStartTime = iEntry->StartTimeL(); + TCalRRule rRule; + rRule.SetType( TCalRRule::EDaily ); + rRule.SetCount( 5 ); + //rRule.SetInterval( 1 ); + rRule.SetDtStart( meetingStartTime ); + iEntry->SetRRuleL( rRule ); + // Entry is repeating 5 times every day from today onwards + + CreateMREntryL(); // Creating iMrEntry + + TESMRRecurrenceValue recurrence; + TTime until; + iMrEntry->GetRecurrenceL( recurrence, until ); + + TTime recurrenceUntil = meetingStartTime.TimeUtcL() + TTimeIntervalDays(4); + + // Test data + TDateTime start = meetingStartTime.TimeLocalL().DateTime(); + TDateTime givenUntil = recurrenceUntil.DateTime(); + TDateTime fetchedUntil = until.DateTime(); + + EUNIT_ASSERT_DESC( recurrence == ERecurrenceDaily, "Entry should be recurring daily" ); + EUNIT_ASSERT_DESC( until == recurrenceUntil, "Entrys until time is not 5 days from now" ); + } + + +// - EUnit test table -------------------------------------------------------- + +EUNIT_BEGIN_TEST_TABLE( + UT_CESMRMeetingRequestEntry, + "MRMeetingRequestEntry unit and module tests.", + "UNIT" ) + +EUNIT_TEST( + "Class creation (NewL)", + "CESMRMeetingRequestEntry", + "NewL", + "FUNCTIONALITY", + SetupL, T_Global_CESMRMeetingRequestEntry_NewL, Teardown ) + +EUNIT_TEST( + "Validate Entry - 1", + "CESMRMeetingRequestEntry", + "ValidateEntryL", + "FUNCTIONALITY", + SetupL, T_ValidateEntryL_1, Teardown ) + +EUNIT_TEST( + "Validate Entry - 2", + "CESMRMeetingRequestEntry", + "ValidateEntryL", + "FUNCTIONALITY", + SetupL, T_ValidateEntryL_2, Teardown ) + +EUNIT_TEST( + "Entry Attendee Info", + "CESMRMeetingRequestEntry", + "EntryAttendeeInfoL", + "FUNCTIONALITY", + SetupL, T_EntryAttendeeInfoL, Teardown ) + +EUNIT_TEST( + "Get recurrence", + "CESMRMeetingRequestEntry", + "GetRecurrenceL", + "FUNCTIONALITY", + SetupL, T_GetRecurrenceL, Teardown ) + +EUNIT_END_TEST_TABLE