50
|
1 |
/*
|
|
2 |
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
3 |
* All rights reserved.
|
|
4 |
* This component and the accompanying materials are made available
|
|
5 |
* under the terms of "Eclipse Public License v1.0"
|
|
6 |
* which accompanies this distribution, and is available
|
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
8 |
*
|
|
9 |
* Initial Contributors:
|
|
10 |
* Nokia Corporation - initial contribution.
|
|
11 |
*
|
|
12 |
* Contributors:
|
|
13 |
*
|
|
14 |
* Description: Source code file for contact adapter test utilities.
|
|
15 |
*
|
|
16 |
*/
|
|
17 |
|
|
18 |
#include "cnsmladaptertestutilities.h"
|
|
19 |
#include <eunitmacros.h>
|
|
20 |
#include <utf.h>
|
|
21 |
#include <cntitem.h> // CContactCard
|
|
22 |
#include <cntfield.h> // CContactItemField
|
|
23 |
#include <cntfldst.h> // CContactTextField
|
|
24 |
#include <s32mem.H>
|
|
25 |
|
|
26 |
namespace
|
|
27 |
{
|
|
28 |
// EUNIT_PRINT will truncate descriptors longer than 512 characters.
|
|
29 |
const TInt KEunitPrintMaxLength = 512;
|
|
30 |
}
|
|
31 |
|
|
32 |
CNSmlAdapterTestUtilities* CNSmlAdapterTestUtilities::NewL()
|
|
33 |
{
|
|
34 |
CNSmlAdapterTestUtilities* self = CNSmlAdapterTestUtilities::NewLC();
|
|
35 |
CleanupStack::Pop();
|
|
36 |
return self;
|
|
37 |
}
|
|
38 |
|
|
39 |
CNSmlAdapterTestUtilities* CNSmlAdapterTestUtilities::NewLC()
|
|
40 |
{
|
|
41 |
CNSmlAdapterTestUtilities* self = new( ELeave ) CNSmlAdapterTestUtilities();
|
|
42 |
CleanupStack::PushL( self );
|
|
43 |
self->ConstructL();
|
|
44 |
return self;
|
|
45 |
}
|
|
46 |
|
|
47 |
CNSmlAdapterTestUtilities::CNSmlAdapterTestUtilities()
|
|
48 |
{
|
|
49 |
}
|
|
50 |
|
|
51 |
CNSmlAdapterTestUtilities::~CNSmlAdapterTestUtilities()
|
|
52 |
{
|
|
53 |
iFs.Close();
|
|
54 |
delete iIdArray;
|
|
55 |
delete iContactDatabase;
|
|
56 |
}
|
|
57 |
|
|
58 |
void CNSmlAdapterTestUtilities::ConstructL()
|
|
59 |
{
|
|
60 |
User::LeaveIfError( iFs.Connect() );
|
|
61 |
}
|
|
62 |
|
|
63 |
void CNSmlAdapterTestUtilities::OpenVCardFromFileLC( const TDesC& aFileName, RFileReadStream& aReadStream )
|
|
64 |
{
|
|
65 |
TInt err = aReadStream.Open( iFs, aFileName, EFileRead );
|
|
66 |
if (err != KErrNone)
|
|
67 |
{
|
|
68 |
if (err == KErrNotFound)
|
|
69 |
{
|
|
70 |
EUNIT_PRINT( _L("%S ,vCard file not found"), &aFileName );
|
|
71 |
}
|
|
72 |
else if ( err == KErrPathNotFound )
|
|
73 |
{
|
|
74 |
EUNIT_PRINT( _L("%S ,vCard path not found"), &aFileName );
|
|
75 |
}
|
|
76 |
else
|
|
77 |
{
|
|
78 |
EUNIT_PRINT( _L("%S , vCard file cannot be opened. Error code %d"), &aFileName, err );
|
|
79 |
}
|
|
80 |
User::Leave( err );
|
|
81 |
}
|
|
82 |
EUNIT_PRINT( _L("VCard opened") );
|
|
83 |
CleanupClosePushL( aReadStream );
|
|
84 |
}
|
|
85 |
|
|
86 |
HBufC* CNSmlAdapterTestUtilities::ReadVCardFromFileLC( const TDesC& aFileName )
|
|
87 |
{
|
|
88 |
HBufC8* vCard8 = ReadVCard8FromFileLC( aFileName );
|
|
89 |
HBufC* vCard = HBufC::NewL( vCard8->Length() );
|
|
90 |
vCard8->Des().Copy( *vCard8 );
|
|
91 |
CleanupStack::PopAndDestroy( vCard8 );
|
|
92 |
|
|
93 |
CleanupStack::PushL( vCard );
|
|
94 |
return vCard;
|
|
95 |
}
|
|
96 |
|
|
97 |
HBufC8* CNSmlAdapterTestUtilities::ReadVCard8FromFileLC( const TDesC& aFileName )
|
|
98 |
{
|
|
99 |
RFileReadStream readStream;
|
|
100 |
OpenVCardFromFileLC(aFileName, readStream);
|
|
101 |
|
|
102 |
const TInt fileSize = readStream.Source()->SizeL();
|
|
103 |
CBufFlat* buffer = CBufFlat::NewL( fileSize );
|
|
104 |
CleanupStack::PushL( buffer );
|
|
105 |
|
|
106 |
RBufWriteStream writeStream( *buffer );
|
|
107 |
CleanupClosePushL( writeStream );
|
|
108 |
writeStream.WriteL( readStream );
|
|
109 |
writeStream.CommitL();
|
|
110 |
|
|
111 |
HBufC8* vCard8 = buffer->Ptr(0).AllocL();
|
|
112 |
CleanupStack::PopAndDestroy( 3, &readStream );
|
|
113 |
|
|
114 |
CleanupStack::PushL( vCard8 );
|
|
115 |
return vCard8;
|
|
116 |
}
|
|
117 |
|
|
118 |
CBufFlat* CNSmlAdapterTestUtilities::ReadBufFromFileLC( const TDesC& aFileName )
|
|
119 |
{
|
|
120 |
RFileReadStream readStream;
|
|
121 |
OpenVCardFromFileLC(aFileName, readStream);
|
|
122 |
|
|
123 |
const TInt fileSize = readStream.Source()->SizeL();
|
|
124 |
CBufFlat* buffer = CBufFlat::NewL( fileSize );
|
|
125 |
CleanupStack::PushL( buffer );
|
|
126 |
|
|
127 |
RBufWriteStream writeStream( *buffer );
|
|
128 |
CleanupClosePushL( writeStream );
|
|
129 |
writeStream.WriteL( readStream );
|
|
130 |
writeStream.CommitL();
|
|
131 |
CleanupStack::PopAndDestroy( &writeStream );
|
|
132 |
CleanupStack::Pop( buffer );
|
|
133 |
CleanupStack::PopAndDestroy( &readStream );
|
|
134 |
CleanupStack::PushL( buffer );
|
|
135 |
return buffer;
|
|
136 |
}
|
|
137 |
|
|
138 |
void CNSmlAdapterTestUtilities::SetupEmptyContactDbL( const TDesC& aDbName )
|
|
139 |
{
|
|
140 |
if( aDbName.Length() > 0 )
|
|
141 |
{
|
|
142 |
iContactDatabase = CContactDatabase::ReplaceL( aDbName );
|
|
143 |
}
|
|
144 |
else
|
|
145 |
{
|
|
146 |
iContactDatabase = CContactDatabase::OpenL(); // Use default contact DB.
|
|
147 |
}
|
|
148 |
|
|
149 |
CContactIdArray* array = iContactDatabase->ContactsChangedSinceL( Time::NullTTime() );
|
|
150 |
CleanupStack::PushL( array );
|
|
151 |
iContactDatabase->DeleteContactsL(*array);
|
|
152 |
CleanupStack::PopAndDestroy( array );
|
|
153 |
}
|
|
154 |
|
|
155 |
/**
|
|
156 |
* Setup contact DB with the following contacts
|
|
157 |
* + Tim Tester (id index 0)
|
|
158 |
* + Teddy McTest (id index 1)
|
|
159 |
* + Tod TestHill (id index 2)
|
|
160 |
* + Simon Software (id index 3)
|
|
161 |
* + Cyd Effect (id index 4)
|
|
162 |
* + Nick Name (id index 5)
|
|
163 |
*
|
|
164 |
*/
|
|
165 |
void CNSmlAdapterTestUtilities::SetupAndPopulateContactDbL( const TDesC& aDbName )
|
|
166 |
{
|
|
167 |
if( aDbName.Length() > 0 )
|
|
168 |
{
|
|
169 |
iContactDatabase = CContactDatabase::ReplaceL( aDbName );
|
|
170 |
}
|
|
171 |
else
|
|
172 |
{
|
|
173 |
iContactDatabase = CContactDatabase::OpenL(); // Use default contact DB.
|
|
174 |
}
|
|
175 |
|
|
176 |
iIdArray = CContactIdArray::NewL();
|
|
177 |
|
|
178 |
// Create test contacts
|
|
179 |
iIdArray->AddL( AddContactL( _L( "Tim" ), _L( "Tester" ), _L( "+358501234567" ) ) );
|
|
180 |
iIdArray->AddL( AddContactL( _L( "Teddy" ), _L("McTest" ), _L( "+358501112222" ) ) );
|
|
181 |
iIdArray->AddL( AddContactL( _L( "Tod" ), _L( "TestHill" ), _L( "+358506666666" ) ) );
|
|
182 |
iIdArray->AddL( AddContactL( _L( "Simon" ), _L( "Software" ), _L( "+3585011223333" ) ) );
|
|
183 |
iIdArray->AddL( AddContactL( _L( "Cyd" ), _L( "Effect" ), _L( "+358503334444" ) ) );
|
|
184 |
iIdArray->AddL( AddContactL( _L( "Nick" ), _L( "Name" ), _L( "+358402223333" ) ) );
|
|
185 |
}
|
|
186 |
|
|
187 |
// Helper method to add a simple contact to test contact DB
|
|
188 |
TContactItemId CNSmlAdapterTestUtilities::AddContactL(
|
|
189 |
const TDesC& aFirstName,
|
|
190 |
const TDesC& aLastName,
|
|
191 |
const TDesC& aPhoneNumber )
|
|
192 |
{
|
|
193 |
_LIT( KLabelFamilyName, "Last name");
|
|
194 |
_LIT( KLabelGivenName, "First name");
|
|
195 |
_LIT( KLabelPhone, "Phone");
|
|
196 |
//_LIT( KLabelNickname, "X-EPOCSECONDNAME");
|
|
197 |
|
|
198 |
CContactCard* card = CContactCard::NewLC();
|
|
199 |
|
|
200 |
// Family name field
|
|
201 |
CContactItemField* familyNameField =
|
|
202 |
CContactItemField::NewLC( KStorageTypeText, KUidContactFieldFamilyName );
|
|
203 |
familyNameField->SetLabelL( KLabelFamilyName );
|
|
204 |
familyNameField->SetMapping( KUidContactFieldVCardMapUnusedN );
|
|
205 |
familyNameField->TextStorage()->SetTextL( aLastName );
|
|
206 |
card->AddFieldL( *familyNameField ); // Takes ownership
|
|
207 |
CleanupStack::Pop( familyNameField );
|
|
208 |
|
|
209 |
// First name field
|
|
210 |
CContactItemField* nameField =
|
|
211 |
CContactItemField::NewLC( KStorageTypeText, KUidContactFieldGivenName );
|
|
212 |
nameField->SetLabelL( KLabelGivenName );
|
|
213 |
nameField->SetMapping( KUidContactFieldVCardMapUnusedN );
|
|
214 |
nameField->TextStorage()->SetTextL( aFirstName );
|
|
215 |
card->AddFieldL( *nameField );
|
|
216 |
CleanupStack::Pop(nameField);
|
|
217 |
|
|
218 |
// Phone number field
|
|
219 |
CContactItemField* phoneField =
|
|
220 |
CContactItemField::NewLC( KStorageTypeText, KUidContactFieldPhoneNumber );
|
|
221 |
phoneField->SetLabelL( KLabelPhone );
|
|
222 |
phoneField->SetMapping( KUidContactFieldVCardMapTEL );
|
|
223 |
phoneField->TextStorage()->SetTextL( aPhoneNumber );
|
|
224 |
card->AddFieldL( *phoneField );
|
|
225 |
CleanupStack::Pop( phoneField );
|
|
226 |
|
|
227 |
// Nickname field
|
|
228 |
/*if( aNickname.Length() > 0 )
|
|
229 |
{
|
|
230 |
CContactItemField* NicknameField =
|
|
231 |
CContactItemField::NewLC( KStorageTypeText, KUidContactFieldSecondName );
|
|
232 |
NicknameField->SetLabelL( KLabelNickname );
|
|
233 |
NicknameField->SetMapping( KUidContactFieldVCardMapSECONDNAME );
|
|
234 |
NicknameField->TextStorage()->SetTextL( aNickname );
|
|
235 |
card->AddFieldL( *NicknameField );
|
|
236 |
CleanupStack::Pop( NicknameField );
|
|
237 |
}*/
|
|
238 |
|
|
239 |
|
|
240 |
TContactItemId cardId = iContactDatabase->AddNewContactL( *card );
|
|
241 |
CleanupStack::PopAndDestroy( card );
|
|
242 |
|
|
243 |
return cardId;
|
|
244 |
}
|
|
245 |
|
|
246 |
/**
|
|
247 |
* Empties the test contact DB to its initial state.
|
|
248 |
*/
|
|
249 |
void CNSmlAdapterTestUtilities::TeardownAndEmptyContactDbL( const TDesC& aDbName )
|
|
250 |
{
|
|
251 |
iContactDatabase->DeleteContactsL( *iIdArray );
|
|
252 |
|
|
253 |
delete iIdArray;
|
|
254 |
iIdArray = NULL;
|
|
255 |
|
|
256 |
delete iContactDatabase;
|
|
257 |
iContactDatabase = NULL;
|
|
258 |
if( aDbName.Length() > 0 )
|
|
259 |
{
|
|
260 |
TRAP_IGNORE( CContactDatabase::DeleteDatabaseL( aDbName ) );
|
|
261 |
}
|
|
262 |
}
|
|
263 |
|
|
264 |
CContactDatabase* CNSmlAdapterTestUtilities::GetDb()
|
|
265 |
{
|
|
266 |
EUNIT_ASSERT( iContactDatabase );
|
|
267 |
return iContactDatabase;
|
|
268 |
}
|
|
269 |
|
|
270 |
CContactIdArray* CNSmlAdapterTestUtilities::GetContactArray()
|
|
271 |
{
|
|
272 |
return iIdArray;
|
|
273 |
}
|
|
274 |
|
|
275 |
RFs& CNSmlAdapterTestUtilities::FileSession()
|
|
276 |
{
|
|
277 |
return iFs;
|
|
278 |
}
|
|
279 |
|
|
280 |
CBufBase* CNSmlAdapterTestUtilities::ExportContactLC( TContactItemId aId )
|
|
281 |
{
|
|
282 |
CContactDatabase* db = CContactDatabase::OpenL(); // Use default contact DB.
|
|
283 |
CleanupStack::PushL( db );
|
|
284 |
CContactIdArray* idArr = CContactIdArray::NewLC();
|
|
285 |
idArr->AddL( aId );
|
|
286 |
CBufFlat* buffer = CBufFlat::NewL( 1024 );
|
|
287 |
CleanupStack::PushL( buffer );
|
|
288 |
RBufWriteStream writeStream( *buffer );
|
|
289 |
CleanupClosePushL( writeStream );
|
|
290 |
|
|
291 |
TRAPD( err, iContactDatabase->ExportSelectedContactsL( TUid::Uid(KVersitEntityUidVCard), *idArr,
|
|
292 |
writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
|
|
293 |
|
|
294 |
EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
|
|
295 |
|
|
296 |
CleanupStack::PopAndDestroy( &writeStream );
|
|
297 |
CleanupStack::Pop( buffer );
|
|
298 |
CleanupStack::PopAndDestroy( idArr );
|
|
299 |
CleanupStack::PopAndDestroy( db );
|
|
300 |
CleanupStack::PushL( buffer );
|
|
301 |
return buffer;
|
|
302 |
}
|
|
303 |
|
|
304 |
void CNSmlAdapterTestUtilities::PrintData( const TDesC& aTitle, CBufBase& aBuf )
|
|
305 |
{
|
|
306 |
|
|
307 |
EUNIT_PRINT( aTitle );
|
|
308 |
|
|
309 |
for (TInt i = 0; i < aBuf.Ptr(0).Length(); i += KEunitPrintMaxLength )
|
|
310 |
{
|
|
311 |
EUNIT_PRINT( aBuf.Ptr(i) );
|
|
312 |
}
|
|
313 |
|
|
314 |
}
|
|
315 |
|
|
316 |
void CNSmlAdapterTestUtilities::PrintData( const TDesC8& aTitle, CBufBase& aBuf )
|
|
317 |
{
|
|
318 |
|
|
319 |
EUNIT_PRINT( aTitle );
|
|
320 |
|
|
321 |
for (TInt i = 0; i < aBuf.Ptr(0).Length(); i += KEunitPrintMaxLength )
|
|
322 |
{
|
|
323 |
EUNIT_PRINT( aBuf.Ptr(i) );
|
|
324 |
}
|
|
325 |
|
|
326 |
}
|
|
327 |
|
|
328 |
|
|
329 |
|