Update contrib.
1 // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
24 #undef __UHEAP_MARKEND
25 #define __UHEAP_MARKEND
27 LOCAL_D TDBMS_CRCChecks TheCrcChecker;
29 #ifndef __linux__ //No CRC test on LINUX
31 const TPtrC KCrcRecord=_L("\\epoc32\\winscw\\c\\dbms-tst\\T_WINDOW.CRC");
33 const TPtrC KCrcRecord=_L("C:\\dbms-tst\\T_WINDOW.CRC");
38 LOCAL_D RTest test(_L("T_WINDOW : Testing the 'window' stage"));
39 LOCAL_D CTrapCleanup* TheTrapCleanup;
40 LOCAL_D CFileStore* TheStore;
41 LOCAL_D RDbStoreDatabase TheDatabase;
42 LOCAL_D RDbView TheView;
45 const TInt KTestCleanupStack=0x20;
48 const TPtrC KTestDir=_L(".\\dbms-tst\\");
50 const TPtrC KTestDir=_L("C:\\dbms-tst\\");
53 const TPtrC KTestFile=_S("T_WINDOW.DB");
54 const TPtrC KTableName=_S("TestTable");
55 const TPtrC KColumnID=_S("id");
56 const TPtrC KIndexName=_S("TestIndex");
57 const TInt KRecords=10;
58 const TPtrC KCreateTable=_L("CREATE TABLE TestTable (id INTEGER NOT NULL)");
59 const TPtrC KCreateIndex=_L("CREATE UNIQUE INDEX TestIndex ON TestTable (id)");
60 const TPtrC KEmptyQuery=_L("select * from TestTable where id is null");
61 const TPtrC KOrderQuery=_L("select * from TestTable order by id");
62 const TDbWindow KSingleSlotWindow(0,0);
63 const TDbWindow KSmallWindow(2,2);
64 const TDbWindow KLargeWindow(20,0);
67 // Create the database-in-a-store
69 LOCAL_C void CreateDatabaseL()
71 CFileStore* store=CPermanentFileStore::ReplaceLC(TheFs,KTestFile,EFileRead|EFileWrite);
72 store->SetTypeL(KPermanentFileStoreLayoutUid);
74 id=TheDatabase.CreateL(store);
81 LOCAL_C void CloseDatabaseL()
83 // cannot evaluate size info for store database
84 RDbDatabase::TSize size=TheDatabase.Size();
87 test (TheDatabase.UpdateStats()==KErrNone);
88 size=TheDatabase.Size();
94 TInt err = TheCrcChecker.GenerateCrcL(KTestFile);
95 test(err == KErrNone);
98 LOCAL_C void CreateTable()
101 test(TheDatabase.Execute(KCreateTable)==KErrNone);
103 test(table.Open(TheDatabase,KTableName,table.EInsertOnly)==KErrNone);
104 for (TInt ii=0;ii<KRecords;++ii)
111 test(TheDatabase.Execute(KCreateIndex)==KErrNone);
112 test (TheDatabase.Commit()==KErrNone);
122 @SYMTestCaseID SYSLIB-DBMS-CT-0638
123 @SYMTestCaseDesc Tests for navigation
124 @SYMTestPriority Medium
125 @SYMTestActions Tests for navigation in an empty window
126 @SYMTestExpectedResults Test must not fail
129 LOCAL_C void TestEmpty()
131 test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0638 Unevaluated "));
132 test(TheView.Prepare(TheDatabase,KEmptyQuery,TDbWindow::EUnlimited)==KErrNone);
133 test(TheView.CountL(TheView.EQuick)==0);
134 test(!TheView.FirstL());
135 test(TheView.AtEnd());
136 test(!TheView.PreviousL());
137 test(TheView.AtBeginning());
138 test(!TheView.LastL());
139 test(TheView.AtBeginning());
140 test(!TheView.NextL());
141 test(TheView.AtEnd());
142 test.Next(_L("Evaluated"));
143 test(TheView.EvaluateAll()==KErrNone);
144 test(TheView.CountL()==0);
145 test(!TheView.FirstL());
146 test(TheView.AtEnd());
147 test(!TheView.PreviousL());
148 test(TheView.AtBeginning());
149 test(!TheView.LastL());
150 test(TheView.AtBeginning());
151 test(!TheView.NextL());
152 test(TheView.AtEnd());
158 @SYMTestCaseID SYSLIB-DBMS-CT-0639
159 @SYMTestCaseDesc Tests for navigation
160 @SYMTestPriority Medium
161 @SYMTestActions Tests for the unlimited (dynaset) window
162 @SYMTestExpectedResults Test must not fail
165 LOCAL_C void TestUnlimited()
167 test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0639 EvaluateAll "));
168 test(TheView.Prepare(TheDatabase,KOrderQuery,TDbWindow::EUnlimited)==KErrNone);
169 test(TheView.EvaluateAll()==KErrNone);
170 test(!TheView.Unevaluated());
171 test(TheView.CountL()==KRecords);
173 for (TheView.BeginningL();TheView.NextL();)
176 for (TheView.EndL();TheView.PreviousL();)
179 test(!TheView.Unevaluated());
180 test.Next(_L("Incremental evaluate"));
182 cc=TheView.CountL(TheView.EQuick);
184 test(!TheView.FirstL());
185 while (TheView.Unevaluated())
187 test(TheView.Evaluate()>=KErrNone);
188 TInt ii=TheView.CountL()-cc;
193 test(TheView.AtRow());
196 test(!TheView.AtRow());
199 test.Next(_L("Insert"));
200 // The new records should go on the end of the set
202 TheView.SetColL(1,TInt(-1));
204 test(TheView.CountL()==KRecords+1);
205 test(TheView.LastL());
207 test(TheView.ColInt(1)==-1);
208 // because of order, it should appear at beginning on re-evaluation
210 test(TheView.EvaluateAll()==KErrNone);
211 test(TheView.CountL()==KRecords+1);
212 test(TheView.FirstL());
214 test(TheView.ColInt(1)==-1);
215 test.Next(_L("Update"));
216 // updated records should not move (or disappear) in the set
218 TheView.SetColL(1,KRecords);
220 test(TheView.CountL()==KRecords+1);
221 test(TheView.FirstL());
223 test(TheView.ColInt(1)==KRecords);
224 // because of order, it should appear at end on re-evaluation
226 test(TheView.EvaluateAll()==KErrNone);
227 test(TheView.CountL()==KRecords+1);
228 test(TheView.LastL());
230 test(TheView.ColInt(1)==KRecords);
231 test.Next(_L("Bookmarks"));
232 TDbBookmark mark=TheView.Bookmark();
233 TheView.BeginningL();
234 TRAPD(r,TheView.GotoL(mark));
237 test(TheView.ColInt(1)==KRecords);
238 test(!TheView.NextL());
239 test(TheView.PreviousL());
240 test.Next(_L("Delete"));
241 // should disappear from the set
243 test(TheView.CountL()==KRecords);
244 for (TheView.BeginningL();TheView.NextL();)
247 test(TheView.ColInt(1)!=KRecords);
249 TRAP(r,TheView.GotoL(mark));
252 test(TheView.EvaluateAll()==KErrNone);
253 test(TheView.CountL()==KRecords);
254 for (TheView.BeginningL();TheView.NextL();)
257 test(TheView.ColInt(1)!=KRecords);
259 TRAP(r,TheView.GotoL(mark));
266 // do as much incremental evaluation as possible
268 LOCAL_C void Evaluate()
270 test(TheView.EvaluateAll()==KErrNone);
274 // get to the true end of set
276 LOCAL_C void GotoEnd()
280 while (TheView.AtRow())
282 if (!TheView.Unevaluated())
288 LOCAL_C void CheckWindow(TInt forward,TInt back)
291 for (ii=0;ii<forward;++ii)
292 test(TheView.NextL());
293 test(!TheView.NextL());
294 for (ii=0;ii<forward+back+1;++ii)
295 test(TheView.PreviousL());
296 test(!TheView.PreviousL());
297 for (ii=0;ii<back+1;++ii)
298 test(TheView.NextL());
302 @SYMTestCaseID SYSLIB-DBMS-CT-0640
303 @SYMTestCaseDesc Tests for RDbView
304 @SYMTestPriority Medium
305 @SYMTestActions Tests for a restricted sized window
306 @SYMTestExpectedResults Test must not fail
309 LOCAL_C void TestRestricted()
311 test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0640 Behaviour at start of set "));
312 test(TheView.Prepare(TheDatabase,KOrderQuery,KSingleSlotWindow)==KErrNone);
313 test(TheView.EvaluateAll()==KErrNone);
314 test(TheView.CountL()==1);
315 test(!TheView.Unevaluated());
316 test(TheView.NextL());
317 test(!TheView.Unevaluated());
319 TInt id=TheView.ColInt(1);
320 test(!TheView.NextL());
321 test(TheView.Unevaluated());
323 test(TheView.CountL()==1);
324 test(TheView.AtRow());
325 test(!TheView.PreviousL());
326 test(TheView.Unevaluated());
328 test(TheView.CountL()==1);
329 test(TheView.AtRow());
331 test(TheView.ColInt(1)==id);
332 test(!TheView.PreviousL());
333 test(TheView.Unevaluated());
335 test(TheView.CountL()==1);
336 test(TheView.AtBeginning());
337 test(TheView.NextL());
339 test(TheView.ColInt(1)==id);
340 test(!TheView.Unevaluated());
341 test.Next(_L("Behaviour at end of set"));
343 test(TheView.LastL());
344 test(!TheView.Unevaluated());
346 id=TheView.ColInt(1);
347 test(!TheView.PreviousL());
348 test(TheView.Unevaluated());
350 test(TheView.CountL()==1);
351 test(TheView.AtRow());
352 test(!TheView.NextL());
353 test(TheView.Unevaluated());
355 test(TheView.CountL()==1);
356 test(TheView.AtRow());
358 test(TheView.ColInt(1)==id);
359 test(!TheView.NextL());
360 test(TheView.Unevaluated());
362 test(TheView.CountL()==1);
363 test(TheView.AtEnd());
364 test(TheView.PreviousL());
366 test(TheView.ColInt(1)==id);
367 test(!TheView.Unevaluated());
370 test.Next(_L("Forward and backwards slots"));
371 test(TheView.Prepare(TheDatabase,KOrderQuery,KSmallWindow)==KErrNone);
372 test(TheView.EvaluateAll()==KErrNone);
373 test(TheView.CountL()==5);
374 test(TheView.FirstL());
376 test(TheView.NextL());
377 test(TheView.NextL()); // now on preferred slot (id=2)
378 test(!TheView.Unevaluated());
379 test(TheView.NextL());
380 test(TheView.Unevaluated());
383 test(TheView.LastL()); // id=5
385 test(TheView.LastL()); // id=7
386 Evaluate(); // should now have last five rows
388 test(TheView.LastL()); // id=9
389 Evaluate(); // no more rows
390 CheckWindow(0,4); // all behind us now
392 test(TheView.ColInt(1)==9);
393 TheView.FirstL(); // id=5
395 TheView.FirstL(); // id=3
397 TheView.FirstL(); // id=1
401 test.Next(_L("Bookmarks"));
402 TDbBookmark mark=TheView.Bookmark();
403 test(TheView.NextL());
404 test(TheView.NextL());
405 test(TheView.NextL());
407 TRAPD(r,TheView.GotoL(mark));
411 TRAP(r,TheView.GotoL(mark));
413 test.Next(_L("Delete"));
414 test(TheView.FirstL());
416 test(TheView.ColInt(1)==0);
418 test(TheView.CountL()==4);
421 test.Next(_L("Insert"));
423 TheView.SetColL(1,TInt(0));
425 test(TheView.CountL()==4);
428 test(TheView.ColInt(1)==1);
430 test(TheView.EvaluateAll()==KErrNone);
431 test(TheView.FirstL());
433 test(TheView.ColInt(1)==0);
442 test.Start(_L("Setting up test table"));
445 test.Next(_L("Empty Window"));
448 test.Next(_L("Unlimited Window"));
449 TRAP(r,TestUnlimited();)
451 test.Next(_L("Sized window"));
452 TRAP(r,TestRestricted();)
454 test.Next(_L("Cleanup"));
455 TRAP(r,CloseDatabaseL();)
462 // Prepare the test directory.
464 LOCAL_C void setupTestDirectory()
466 TInt r=TheFs.Connect();
469 r=TheFs.MkDir(KTestDir);
470 test(r==KErrNone || r==KErrAlreadyExists);
471 r=TheFs.SetSessionPath(KTestDir);
473 // On TOOLS2 - RFs::SetSessionPath() will affect all RFs Sessions,
474 // the two RFs need same session path anyway
476 r=TheCrcChecker.SetSessionPath(KTestDir);
482 // Initialise the cleanup stack.
484 LOCAL_C void setupCleanup()
486 TheTrapCleanup=CTrapCleanup::New();
487 test(TheTrapCleanup!=NULL);
490 for (TInt i=KTestCleanupStack;i>0;i--)\
491 CleanupStack::PushL((TAny*)0);\
492 CleanupStack::Pop(KTestCleanupStack);\
497 LOCAL_C void DeleteDataFile(const TDesC& aFullName)
500 TInt err = fsSession.Connect();
504 if(fsSession.Entry(aFullName, entry) == KErrNone)
506 RDebug::Print(_L("Deleting \"%S\" file.\n"), &aFullName);
507 err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly);
510 RDebug::Print(_L("Error %d changing \"%S\" file attributes.\n"), err, &aFullName);
512 err = fsSession.Delete(aFullName);
515 RDebug::Print(_L("Error %d deleting \"%S\" file.\n"), err, &aFullName);
522 RDebug::Print(_L("Error %d connecting file session. File: %S.\n"), err, &aFullName);
527 // Test streaming conversions.
529 GLDEF_C TInt E32Main()
532 setupTestDirectory();
535 test.Start(_L("Standard database"));
537 test.Next(_L("Secure database"));
540 //deletion of data files must be done before call to end - DEF047652
542 _LIT(KTestDbName, "C:\\dbms-tst\\T_WINDOW.DB");
543 ::DeleteDataFile(KTestDbName);
545 ::DeleteDataFile(KTestFile);
551 TRAPD(lc, err = TheCrcChecker.DumpCrcRecordsL(KCrcRecord));
555 TRAPD(lc, err = TheCrcChecker.ValidateCrcRecordsL(KCrcRecord));
557 TheCrcChecker.ErrorReportL(err, errmsg);
558 RDebug::Print(errmsg);
559 test(err==KErrNone || err==TDBMS_CRCChecks::ECrcCheckOk);
566 delete TheTrapCleanup;