📄 t_viewsort.cpp
字号:
// T_ViewSort.cpp
// Copyright (c) 2003-2004 Symbian Software Ltd. All rights reserved.
//
// ViewSort Test module
#include <e32test.h>
#include <cntviewbase.h>
#include <cntitem.h>
#include <cntfldst.h>
#include "CContactViewEventQueue.h"
_LIT(KTestName, "T_ViewSort");
_LIT(KTestDbName, "c:\\system\\data\\T_ViewSort.cdb");
// data to find SimpleSortPlugin DLL
_LIT8(KReverseSortPlugin, "application.vnd.symbian.com/contacts-reverse-sort");
LOCAL_D RTest test(KTestName);
class CTestResources : public CBase
{
public:
static CTestResources* NewLC();
void ConstructL();
~CTestResources();
TContactItemId AddNewContactL(const TDesC& aGivenName, const TDesC& aFamilyName=KNullDesC, const TDesC& aCompanyName=KNullDesC);
void CreateTestOneContactsL();
void CreateTestThreeContactsL();
void StartTestOneL();
void StartTestThreeL();
RFs iFs;
CContactDatabase* iDb;
CContactViewEventQueue* iViewEventQueue;
CContactViewEventQueue* iViewEventQueueReverse;
RContactViewSortOrder iViewSortOrder;
CContactLocalView* iLocalView;
CContactLocalView* iLocalReverseView;
RArray<TContactItemId> iIdsInViewSortOrder;
RArray<TContactItemId> iIdsInViewReverseSortOrder;
};
CTestResources* CTestResources::NewLC()
{
CTestResources* self = new(ELeave) CTestResources;
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
void CTestResources::ConstructL()
{
User::LeaveIfError(iFs.Connect());
}
void CTestResources::StartTestOneL()
{
// Create an empty database
iDb = CContactDatabase::ReplaceL(KTestDbName);
CreateTestOneContactsL();
test.Next(_L("Starting Test 1"));
iViewEventQueue = CContactViewEventQueue::NewL();
iViewEventQueueReverse = CContactViewEventQueue::NewL();
iViewSortOrder.AppendL(KUidContactFieldGivenName);
iViewSortOrder.AppendL(KUidContactFieldFamilyName);
iViewSortOrder.AppendL(KUidContactFieldCompanyName);
iLocalView = CContactLocalView::NewL(*iViewEventQueue, *iDb, iViewSortOrder, EContactsOnly);
TRAPD(err, iLocalReverseView = CContactLocalView::NewL(*iViewEventQueueReverse, *iDb, iViewSortOrder, EContactsOnly, KReverseSortPlugin));
// KErrNotFound means Sort Plug-in was not found
test(err == KErrNone);
// Wait 5 seconds for the view to get ready
TContactViewEvent event;
test(iViewEventQueue->ListenForEvent(5,event));
test(event.iEventType == TContactViewEvent::EReady);
// Wait 5 seconds for the reverse view to get ready
test(iViewEventQueueReverse->ListenForEvent(5,event));
test(event.iEventType == TContactViewEvent::EReady);
}
void CTestResources::StartTestThreeL()
{
// Create an empty database
iDb = CContactDatabase::ReplaceL(KTestDbName);
CreateTestThreeContactsL();
test.Next(_L("Starting Test 3"));
iViewEventQueue = CContactViewEventQueue::NewL();
iViewEventQueueReverse = CContactViewEventQueue::NewL();
iViewSortOrder.AppendL(KUidContactFieldGivenName);
iViewSortOrder.AppendL(KUidContactFieldFamilyName);
iViewSortOrder.AppendL(KUidContactFieldCompanyName);
iLocalView = CContactLocalView::NewL(*iViewEventQueue, *iDb, iViewSortOrder, EContactsOnly);
TRAPD(err, iLocalReverseView = CContactLocalView::NewL(*iViewEventQueueReverse, *iDb, iViewSortOrder, EContactsOnly, KReverseSortPlugin));
// KErrNotFound means Sort Plug-in was not found
test(err == KErrNone);
// Wait 5 seconds for the view to get ready
TContactViewEvent event;
test(iViewEventQueue->ListenForEvent(5,event));
test(event.iEventType == TContactViewEvent::EReady);
// Wait 5 seconds for the reverse view to get ready
test(iViewEventQueueReverse->ListenForEvent(5,event));
test(event.iEventType == TContactViewEvent::EReady);
}
CTestResources::~CTestResources()
{
if (iLocalView) iLocalView->Close(*iViewEventQueue);
if (iLocalReverseView) iLocalReverseView->Close(*iViewEventQueueReverse);
iViewSortOrder.Close();
delete iViewEventQueue;
delete iViewEventQueueReverse;
delete iDb;
iFs.Delete(KTestDbName);
iFs.Close();
iIdsInViewSortOrder.Close();
}
void CTestResources::CreateTestOneContactsL()
{
// these must be in the same order as the view ordering
iIdsInViewSortOrder.Append(AddNewContactL(_L(" a"))); // Check that space before is dealt with properly
iIdsInViewSortOrder.Append(AddNewContactL(_L(" a"), _L(" y")));
iIdsInViewSortOrder.Append(AddNewContactL(_L(" a"), _L("x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L(" aa"), _L("x"))); // Check that space before is dealt with properly
iIdsInViewSortOrder.Append(AddNewContactL(_L(" aa"), _L("y")));
iIdsInViewSortOrder.Append(AddNewContactL(_L(" c")));
iIdsInViewSortOrder.Append(AddNewContactL(_L(" c"), _L("x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("a")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("a"), _L("z")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("aa")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("aa"), _L("x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("aa"), _L("x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("aa"), _L("z")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("b"), _L(" xx")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("b"), _L(" y")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("b"), _L("x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("b"), _L("z z")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("b"), _L("z x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("b"), _L("zx")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("c"), _L("X")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("c"), _L("z")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("d"), _L("x")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("D"), _L("y")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("d"), _L("z")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("e")));
iIdsInViewSortOrder.Append(AddNewContactL(_L(""), _L(""), _L("f")));
iIdsInViewSortOrder.Append(AddNewContactL(_L(""), _L("g")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("h"), _L(""), _L("a")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("h"), _L("b")));
iIdsInViewSortOrder.Append(AddNewContactL(_L("h"), _L("b"), _L("a")));
// Contacts 11 & 12 have the same text
// so reverse order sort will put these in Id order
const TInt count = iIdsInViewSortOrder.Count();
for (TInt i = 0; i < count; i++)
{
TContactItemId id = iIdsInViewSortOrder[count - i - 1];
if (id == 11)
{
iIdsInViewReverseSortOrder.Append(12);
}
else if (id == 12)
{
iIdsInViewReverseSortOrder.Append(11);
}
else
{
iIdsInViewReverseSortOrder.Append(id);
}
}
}
void CTestResources::CreateTestThreeContactsL()
{
// Content and order specified in original defect report
// DEF022410
TContactItemId additionOrder[8];
additionOrder[0] = AddNewContactL(_L("Sunshine"));
additionOrder[1] = AddNewContactL(_L("Symbian"));
additionOrder[2] = AddNewContactL(_L("S ymbian"));
additionOrder[3] = AddNewContactL(_L("Symmetrical"));
additionOrder[4] = AddNewContactL(_L(" Symbian"));
additionOrder[5] = AddNewContactL(_L("Symbian "));
additionOrder[6] = AddNewContactL(_L("_Sunshine"));
additionOrder[7] = AddNewContactL(_L("S_unshine"));
iIdsInViewSortOrder.Append(additionOrder[6]);
iIdsInViewSortOrder.Append(additionOrder[4]);
iIdsInViewSortOrder.Append(additionOrder[7]);
iIdsInViewSortOrder.Append(additionOrder[2]);
iIdsInViewSortOrder.Append(additionOrder[0]);
iIdsInViewSortOrder.Append(additionOrder[1]);
iIdsInViewSortOrder.Append(additionOrder[5]);
iIdsInViewSortOrder.Append(additionOrder[3]);
}
// test to check that special characters
// are sorted properly (INC039675)
void CTestResources::CreateTestFourContactsL()
{
TContactItemId additionOrder[8];
additionOrder[0] = AddNewContactL(_L(".alli"));
additionOrder[1] = AddNewContactL(_L("ally"));
additionOrder[2] = AddNewContactL(_L("alli"));
additionOrder[3] = AddNewContactL(_L(".ally"));
additionOrder[4] = AddNewContactL(_L("alli ."));
additionOrder[5] = AddNewContactL(_L("al .ly"));
additionOrder[6] = AddNewContactL(_L("all .i"));
additionOrder[7] = AddNewContactL(_L(" .ally"));
// correct behaviour of view is in this order
iIdsInViewSortOrder.Append(additionOrder[7]);
iIdsInViewSortOrder.Append(additionOrder[0]);
iIdsInViewSortOrder.Append(additionOrder[3]);
iIdsInViewSortOrder.Append(additionOrder[5]);
iIdsInViewSortOrder.Append(additionOrder[6]);
iIdsInViewSortOrder.Append(additionOrder[2]);
iIdsInViewSortOrder.Append(additionOrder[4]);
iIdsInViewSortOrder.Append(additionOrder[1]);
}
LOCAL_C void TestViewOrderOfContactsL()
{
test.Next(_L("Test the view sort order"));
CTestResources* res = CTestResources::NewLC();
res->StartTestOneL();
CleanupStack::PopAndDestroy(res);
res = CTestResources::NewLC();
res->StartTestThreeL();
CleanupStack::PopAndDestroy(res);
}
LOCAL_C void DoTestsL()
{
test.Start(_L("T_ViewSort"));
TestViewOrderOfContactsL();
test.End();
}
GLDEF_C TInt E32Main()
{
// Init
CTrapCleanup* cleanupStack = CTrapCleanup::New();
if (!cleanupStack)
{
return KErrNoMemory;
}
CActiveScheduler* activeScheduler = new CActiveScheduler;
if (!activeScheduler)
{
return KErrNoMemory;
}
CActiveScheduler::Install(activeScheduler);
// Run the tests
TRAPD(err, DoTestsL());
// Cleanup
delete activeScheduler;
delete cleanupStack;
return err;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -