1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the Qt Mobility Components.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and Digia. For licensing terms and
14
** conditions see http://qt.digia.com/licensing. For further information
15
** use the contact form at http://qt.digia.com/contact-us.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25
** In addition, as a special exception, Digia gives you certain additional
26
** rights. These rights are described in the Digia Qt LGPL Exception
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29
** GNU General Public License Usage
30
** Alternatively, this file may be used under the terms of the GNU
31
** General Public License version 3.0 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file. Please review the following information to
34
** ensure the GNU General Public License version 3.0 requirements will be
35
** met: http://www.gnu.org/copyleft/gpl.html.
40
****************************************************************************/
42
//TESTED_COMPONENT=src/organizer
46
import QtOrganizer 5.0
52
property var signalWaitTime : 300
54
QOrganizerTestUtility {
58
property Rectangle rect: Rectangle {
62
function test_componentCreation_data() {
65
{tag: "No properties",
66
code: "import QtQuick 2.0\n"
67
+ "import QtOrganizer 5.0 \n"
68
+ " OrganizerModel {\n"
71
{tag: "Only id property",
72
code: "import QtQuick 2.0\n"
73
+ "import QtOrganizer 5.0\n"
74
+ " OrganizerModel {\n"
75
+ " id:organizerModelId\n"
78
{tag: "Valuetype properties",
79
code: "import QtQuick 2.0\n"
80
+ "import QtOrganizer 5.0\n"
81
+ " OrganizerModel {\n"
82
+ " id:organizerModelId\n"
83
+ " manager:'memory'\n"
84
+ " startPeriod:'2010-08-12T13:22:01'\n"
85
+ " endPeriod:'2010-09-12T13:22:01'\n"
89
code: "import QtOrganizer 5.0\n"
90
+ "OrganizerModel {\n"
91
+ " id:organizerModelId\n"
92
+ " filter:DetailFieldFilter{\n"
94
+ " field:EventTime.FieldStartDateTime\n"
95
+ " value:'2010-08-12T13:22:01'\n"
99
{tag: "With invalid filter",
100
code: "import QtOrganizer 5.0\n"
101
+ "OrganizerModel {\n"
102
+ " id:organizerModelId\n"
103
+ " filter:InvalidFilter{\n"
108
{tag: "With range filter",
109
code: "import QtOrganizer 5.0\n"
110
+ "OrganizerModel {\n"
111
+ " id:organizerModelId\n"
112
+ " filter:DetailRangeFilter{\n"
114
+ " field:EventTime.FieldStartDateTime\n"
115
+ " min:'2010-08-12T13:22:01'\n"
116
+ " max:'2010-09-12T13:22:01'\n"
120
{tag: "With collection filter",
121
code: "import QtOrganizer 5.0\n"
122
+ "OrganizerModel {\n"
123
+ " id:organizerModelId\n"
124
+ " filter:CollectionFilter{\n"
126
+ " ids:['1234', '456', '90']\n"
130
{tag: "With intersection filter",
131
code: "import QtOrganizer 5.0\n"
132
+ "OrganizerModel {\n"
133
+ " id:organizerModelId\n"
134
+ " filter:IntersectionFilter {\n"
137
+ " DetailFieldFilter{\n"
139
+ " field:EventTime.FieldStartDateTime\n"
140
+ " value:'2010-08-12T13:22:01'\n"
142
+ " DetailRangeFilter{\n"
144
+ " field:EventTime.FieldStartDateTime\n"
145
+ " min:'2010-08-12T13:22:01'\n"
146
+ " max:'2010-09-12T13:22:01'\n"
152
{tag: "With fetchHint",
153
code: "import QtOrganizer 5.0\n"
154
+ "OrganizerModel {\n"
155
+ " id:organizerModelId\n"
156
+ " fetchHint:FetchHint {\n"
158
+ " optimizationHints:FetchHint.AllRequired\n"
164
{tag: "Base organizer item",
165
code: "import QtOrganizer 5.0\n"
166
+ "OrganizerItem {\n"
169
{tag: "Base organizer item: only id",
170
code: "import QtOrganizer 5.0\n"
171
+ "OrganizerItem {\n"
172
+ " id:organizerItem\n"
175
{tag: "Base organizer item: Valuetype properties",
176
code: "import QtOrganizer 5.0\n"
177
+ "OrganizerItem {\n"
178
+ " id:organizerItem\n"
179
+ " displayLabel:'test item'\n"
180
+ " description:'item description'\n"
181
+ " guid:'1112232133'\n"
185
{tag: "Base organizer item: default property",
186
code: "import QtOrganizer 5.0\n"
187
+ "OrganizerItem {\n"
188
+ " id:organizerItem\n"
189
+ " DisplayLabel {\n"
190
+ " label:'test item'\n"
193
+ " description:'item description'\n"
196
+ " guid:'111223213'\n"
202
{tag: "Organizer event",
203
code: "import QtOrganizer 5.0\n"
207
/*{tag: "Organizer event:Valuetype properties",
208
code: "import QtOrganizer 5.0 \n"
210
+ " id:organizerEvent\n"
211
+ " displayLabel:'meeting'\n"
212
+ " startDateTime:'2010-08-12T13:00:00'\n"
213
+ " endDateTime:'2010-08-12T15:00:00'\n"
215
+ " location:'office'\n"
217
+ " label:'53 Brandl st'\n"
218
+ " latitude:-27.579570\n"
219
+ " longitude:153.10031\n"
221
+ " priority:Priority.Low\n"
222
+ " recurrence.recurrenceRules:[\n"
223
+ " RecurrenceRule {\n"
226
+ " recurrence.recurrenceDates:[]\n"
227
+ " recurrence.exceptionDates:[]\n"
239
function test_componentCreation(data)
242
var obj = Qt.createQmlObject(data.code, myRectangle, "dynamicSnippet1");
243
verify(obj != undefined, "Unable to load script for " + data.tag);
245
console.log("Completed test on '" + data.tag + "'")
247
catch (errorObject) {
248
console.log("For code " + data.code + " Error was seen is " + errorObject );
253
function checkDetails(events)
255
var testDataEvents = test_addEvent_data()[0].events
256
var foundEvent = false
257
var testDataEvent = undefined
258
for (var index = 0; index < testDataEvents.length; index++){
259
testDataEvent = testDataEvents[index]
261
console.log("Checking event " + testDataEvent.subject)
262
for (var index2 = 0; index2 < events.length; index2++){
263
var actualEvent = events[index2];
264
if (testDataEvent.subject == actualEvent.description){
266
compare(actualEvent.type, testDataEvent.type)
267
compare(actualEvent.startDateTime.toString(), testDataEvent.startDateTime.toString())
268
compare(actualEvent.endDateTime.toString(), testDataEvent.endDateTime.toString())
269
if (testDataEvent.repeat != undefined){
270
verify(actualEvent.recurrence != undefined, "Expected recurrance Element to be present for event")
271
verify(actualEvent.recurrence.recurrenceRules.length == 1, "Expected there to be one RecurranceRule")
272
var recurranceRule = actualEvent.recurrence.recurrenceRules[0] // first rule only
273
switch (event.repeat){
274
case RecurrenceRule.Daily:
275
case RecurrenceRule.Weekly:
276
case RecurrenceRule.Monthly:
277
case RecurrenceRule.Yearly:
278
compare(recurranceRule.frequency, RecurrenceRule.Weekly)
279
for (var dayIndex=0; dayIndex < testDataEvent.repeatDays; dayIndex++){
280
verify(recurranceRule.daysOfWeek.indexOf(testDataEvent.repeatDays[dayIndex]) != -1, "Expected event to recurrence on day " + testDataEvent.repeatDays[dayIndex])
282
compare(recurranceRule.limit.toString(), testDataEvent.limit.toString())
285
if (event.repeat != RecurrenceRule.Invalid)
286
console.log("Unsupported repeat for Event actual:" + actualEvent.reoccurance + " expected:" + testDataEvent.repeat);
292
//verify(foundEvent, "Did not find event " + testDataEvent.subject)
294
console.log("Done checking Event")
297
// test data is handled by addEvent.qml function addEvents()
298
function test_addEvent_data() {
305
description: "starts 2010-12-09 8AM finishes 5PM",
306
startDateTime: new Date(2010, 12, 9, 8, 0),
307
endDateTime: new Date(2010, 12, 9, 17, 0),
312
description: "starts 2010-12-08 8AM finishes 1PM",
313
startDateTime: new Date(2010, 12, 8, 8, 0),
314
endDateTime: new Date(2010, 12, 8, 13, 0),
319
description: "starts a month from 2010-12-08 at 11AM finish at 2PM",
320
startDateTime: new Date(2010, 12, 8, 11, 0),
321
endDateTime: new Date(2010, 12, 8, 14, 0),
326
description: "starts after Event 3 and finishes 4PM",
327
startDateTime: new Date(2010, 12, 8, 14, 0),
328
endDateTime: new Date(2010, 12, 8, 16, 0),
333
description: "starts after Event 4 and finishes 5PM",
334
startDateTime: new Date(2010, 12, 8, 16, 0),
335
endDateTime: new Date(2010, 12, 8, 17, 0),
340
description: "starts 2010-12-10 at 11AM finishing 1PM, repeating for 4 weeks",
341
startDateTime: new Date(2010, 12, 10, 11, 0),
342
endDateTime: new Date(2010, 12, 10, 13, 0),
343
repeat: RecurrenceRule.Weekly,
344
repeatDays: [Qt.Friday],
352
function test_addEvent(data)
354
var component = Qt.createComponent("addEvent.qml")
355
var obj = component.createObject(top)
356
if (obj == undefined)
357
console.log("Unable to load component from " + name + " error is ", component.errorString())
358
verify(obj != undefined, 'Unable to load component ' + name)
359
obj.addEvents(data.events)
360
var items = obj.testEvents()
362
if (items.length == 0)
363
console.log("No records added")
368
function test_organizermodel_error_data() {
370
{tag: "memory backend", managerToBeTested: "memory"},
371
{tag: "jsondb backend", managerToBeTested: "jsondb"}
375
function test_organizermodel_error(data) {
376
var spyWaitDelay = 200;
377
var organizerChangedSpy = utility.create_testobject("import QtTest 1.0; SignalSpy {}", modelTests);
378
// Create and check that backend for the tests is available
379
var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
380
+ "import QtOrganizer 5.0\n"
381
+ "OrganizerModel {\n"
382
+ " manager: '" + data.managerToBeTested + "'\n"
383
+ "}\n", modelTests);
384
organizerChangedSpy.target = organizerModel;
385
organizerChangedSpy.signalName = "modelChanged";
386
organizerChangedSpy.wait();
387
organizerModel.removeCollection(organizerModel.defaultCollection().collectionId);
388
wait(spyWaitDelay);// how to utilise SignalSpy to check signal is _not_ emitted?
389
compare(organizerModel.error, "PermissionsError");
392
function test_organizermodel_fetchitemsbyid_data() {
394
{tag: "memory backend", managerToBeTested: "memory"},
395
{tag: "jsondb backend", managerToBeTested: "jsondb"}
399
function test_organizermodel_fetchitemsbyid(data) {
400
var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
401
+ "import QtOrganizer 5.0\n"
402
+ "OrganizerModel {\n"
403
+ " manager: '" + data.managerToBeTested + "'\n"
404
+ "}\n", modelTests);
407
compare(organizerModel.fetchItems([]), -1)
409
var spy = Qt.createQmlObject( "import QtTest 1.0 \nSignalSpy {}", modelTests);
410
spy.target = organizerModel;
411
spy.signalName = "itemsFetched";
413
verify(organizerModel.fetchItems(["invalid-id"]) >= 0)
415
compare(spy.count, 1)
419
function fetchItemsPopulation_data() {
421
var event1 = utility.create_testobject("import QtQuick 2.0\n"
422
+ "import QtOrganizer 5.0\n"
424
+ " displayLabel: \"event1:\"\n"
426
+ " startDateTime: new Date(2011, 11, 8, 13, 55)\n"
427
+ " endDateTime: new Date(2011, 11, 8, 14, 07)\n"
428
+ "}\n", modelTests);
430
var event2 = utility.create_testobject("import QtQuick 2.0\n"
431
+ "import QtOrganizer 5.0\n"
433
+ " displayLabel: \"event2:\"\n"
435
+ " startDateTime: new Date(2011, 11, 8, 14, 11)\n"
436
+ " endDateTime: new Date(2011, 11, 8, 14, 15)\n"
437
+ "}\n", modelTests);
439
var event3 = utility.create_testobject("import QtQuick 2.0\n"
440
+ "import QtOrganizer 5.0\n"
442
+ " displayLabel: \"event3:\"\n"
444
+ " startDateTime: new Date(2011, 11, 9, 14, 25, 0)\n"
445
+ " endDateTime: new Date(2011, 11, 9, 14, 45)\n"
446
+ "}\n", modelTests);
448
var event4 = utility.create_testobject("import QtQuick 2.0\n"
449
+ "import QtOrganizer 5.0\n"
451
+ " displayLabel: \"event4:\"\n"
453
+ " startDateTime: new Date(2011, 11, 10, 14, 11)\n"
454
+ " endDateTime: new Date(2011, 11, 10, 14, 45)\n"
455
+ "}\n", modelTests);
457
var event5 = utility.create_testobject("import QtQuick 2.0\n"
458
+ "import QtOrganizer 5.0\n"
460
+ " displayLabel: \"event5:\"\n"
462
+ " startDateTime: new Date(2011, 12, 11, 14, 55)\n"
463
+ " endDateTime: new Date(2011, 12, 11, 15, 05)\n"
464
+ "}\n", modelTests);
480
function test_organizermodel_fetchitems_data() {
482
{tag: "memory backend", managerToBeTested: "memory"},
483
{tag: "jsondb backend", managerToBeTested: "jsondb"}
487
function test_organizermodel_fetchitems(data) {
488
var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
489
+ "import QtOrganizer 5.0\n"
490
+ "OrganizerModel {\n"
491
+ " manager: '" + data.managerToBeTested + "'\n"
492
+ " id:fetchItemsTestModel\n"
493
+ " autoUpdate:true\n "
494
+ " property list<OrganizerItem> testFetchedItems: [OrganizerItem{},OrganizerItem{}]\n"
495
+ " onItemsFetched: {\n"
496
+ " testFetchedItems = fetchedItems;\n"
498
+ "}\n", modelTests);
500
var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
501
modelChangedSpy.target = organizerModel
502
modelChangedSpy.signalName = "modelChanged"
504
var modelItemsFetchedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
505
modelItemsFetchedSpy.target = organizerModel
506
modelItemsFetchedSpy.signalName = "itemsFetched"
508
var startDate = new Date(1977, 12, 9, 8, 0);
509
var endDate = new Date(2022, 12, 9, 8, 0);
510
organizerModel.startPeriod = startDate;
511
organizerModel.endPeriod = endDate;
513
// during initialisation only one modelChanged allowed
514
modelChangedSpy.wait();
515
compare(modelChangedSpy.count, 1)
518
utility.init(organizerModel)
519
utility.empty_calendar();
520
compare(organizerModel.items.length, 0);
522
// Store some test data....
523
var testDataSet = fetchItemsPopulation_data()[0] //Event set 1
524
console.log("Test Set:" + testDataSet.tag)
525
console.log(" Saving " + testDataSet.events.length + " events...")
526
for (var index = 0; index < testDataSet.events.length; index++){
527
modelChangedSpy.clear();
528
console.log("saving event:" + testDataSet.events[index]);
529
organizerModel.saveItem( testDataSet.events[index]);
530
modelChangedSpy.wait();
531
compare(modelChangedSpy.count, 1)
533
console.log("Orgnizer itemcount = " + organizerModel.items.length);
534
compare(organizerModel.items.length, testDataSet.events.length);
536
// 1. Only fetch events with start/end dates before any stored events
537
modelItemsFetchedSpy.clear();
538
startDate = new Date(1977, 11, 9, 8, 0);
539
endDate = new Date(2010, 11, 9, 8, 0);
540
verify(organizerModel.fetchItems( startDate, endDate ) != -1);
541
modelItemsFetchedSpy.wait();
542
compare(modelItemsFetchedSpy.count, 1);
543
compare(organizerModel.fetchItems.length,0);
545
// 2. Nothing fetched if start+end dates are after any stored events
546
modelItemsFetchedSpy.clear();
547
startDate = new Date(2012, 11, 9, 8, 0);
548
endDate = new Date(2099, 11, 9, 8, 0);
549
verify( organizerModel.fetchItems( startDate, endDate ) != -1);
550
modelItemsFetchedSpy.wait();
551
compare(modelItemsFetchedSpy.count, 1);
552
compare(organizerModel.fetchItems.length,0);
554
// 3. All events fetched
555
modelItemsFetchedSpy.clear();
556
startDate = new Date(1977, 11, 9, 8, 0);
557
endDate = new Date(2099, 11, 9, 8, 0);
558
verify( organizerModel.fetchItems( startDate, endDate ) != -1);
559
modelItemsFetchedSpy.wait();
560
compare(modelItemsFetchedSpy.count, 1)
561
compare(organizerModel.testFetchedItems.length, 5);
563
// 4. Only items within start+end fetched
564
modelItemsFetchedSpy.clear();
565
startDate = new Date(2011, 11, 8, 14, 10);
566
endDate = new Date(2011, 11, 10, 20, 0);
567
verify(organizerModel.fetchItems( startDate, endDate ) != -1);
568
modelItemsFetchedSpy.wait();
569
compare(modelItemsFetchedSpy.count, 1)
570
compare(organizerModel.testFetchedItems.length, 3);
573
var testFilterDisplayLabel = Qt.createQmlObject("import QtOrganizer 5.0; DetailFilter{}", organizerModel)
574
testFilterDisplayLabel.detail = Detail.DisplayLabel
575
testFilterDisplayLabel.field = DisplayLabel.FieldLabel
576
testFilterDisplayLabel.value = "event2:"
577
testFilterDisplayLabel.matchFlags = DetailFilter.MatchContains
578
modelItemsFetchedSpy.clear();
579
startDate = new Date(1977, 11, 9, 8, 0);
580
endDate = new Date(2099, 11, 9, 8, 0);
581
verify( organizerModel.fetchItems( startDate, endDate, testFilterDisplayLabel ) != -1);
582
modelItemsFetchedSpy.wait();
583
compare(modelItemsFetchedSpy.count, 1)
584
compare(organizerModel.testFetchedItems.length, 1);
586
// 6. maxcount is not available in Memory model
587
var testDefaultFilter = Qt.createQmlObject("import QtOrganizer 5.0; Filter{}", organizerModel)
588
if (data.managerToBeTested != "memory")
590
startDate = new Date(1977, 11, 9, 8, 0);
591
endDate = new Date(2099, 11, 9, 8, 0);
592
modelItemsFetchedSpy.clear();
593
verify( organizerModel.fetchItems( startDate, endDate, testDefaultFilter, 2) != -1);
594
modelItemsFetchedSpy.wait();
595
compare(modelItemsFetchedSpy.count, 1)
596
compare(organizerModel.testFetchedItems.length, 2);
600
var sortAscending = utility.create_testobject("import QtQuick 2.0\n"
601
+ "import QtOrganizer 5.0\n"
603
+ " detail: Detail.DisplayLabel\n"
604
+ " field: DisplayLabel.FieldLabel\n" //field: DisplayLabelField.FieldLabel\n"
605
+ " id: testAscendingOrder\n"
606
+ " direction: Qt.AscendingOrder\n"
607
+ "}\n", organizerModel);
609
var sortDescending = utility.create_testobject("import QtQuick 2.0\n"
610
+ "import QtOrganizer 5.0\n"
612
+ " detail: Detail.DisplayLabel\n"
613
+ " field: DisplayLabel.FieldLabel\n" //field: DisplayLabelField.FieldLabel\n"
614
+ " id: testDecendingOrder\n"
615
+ " direction: Qt.DescendingOrder\n"
616
+ "}\n", organizerModel);
618
modelItemsFetchedSpy.clear();
619
startDate = new Date(2011, 11, 8, 14, 10);
620
endDate = new Date(2011, 11, 10, 20, 0);
621
modelItemsFetchedSpy.clear();
622
verify( organizerModel.fetchItems( startDate, endDate, testDefaultFilter, -1, [sortAscending] ) != -1);
623
modelItemsFetchedSpy.wait();
624
compare(modelItemsFetchedSpy.count, 1);
625
compare(organizerModel.testFetchedItems.length, 3);
626
var expectedSortOrder = [ "event2:", "event3:", "event4:"]
627
compare(expectedSortOrder.length, organizerModel.testFetchedItems.length);
628
for (var j = 0; j < organizerModel.testFetchedItems.length; j++) {
629
verify(organizerModel.testFetchedItems[j].displayLabel === expectedSortOrder[j], "FetchItems Ascending Sort Order Incorrect.");
632
modelItemsFetchedSpy.clear();
633
verify( organizerModel.fetchItems( startDate, endDate, testDefaultFilter, -1, [sortDescending] ) != -1);
634
modelItemsFetchedSpy.wait();
635
compare(modelItemsFetchedSpy.count, 1);
636
compare(organizerModel.testFetchedItems.length, 3);
637
compare(expectedSortOrder.length, organizerModel.testFetchedItems.length);
638
for ( j = 0; j < organizerModel.testFetchedItems.length; j++) {
639
verify(organizerModel.testFetchedItems[j].displayLabel == expectedSortOrder[2-j], "FetchItems Decending Sort Order Incorrect.");
643
var fetchhint = utility.create_testobject("import QtQuick 2.0\n"
644
+ "import QtOrganizer 5.0\n"
647
+ " optimizationHints:FetchHint.AllRequired\n"
648
+ "}\n", organizerModel);
649
modelItemsFetchedSpy.clear();
650
verify( organizerModel.fetchItems( startDate, endDate, testFilterDisplayLabel, -1, [sortDescending], fetchhint ) != -1);
651
modelItemsFetchedSpy.wait();
652
compare(modelItemsFetchedSpy.count, 1)
653
compare(organizerModel.testFetchedItems.length, 1);
655
// 9. storage locations and maxcount are not available in Memory model
656
if (data.managerToBeTested != "memory")
658
modelItemsFetchedSpy.clear();
659
organizerModel.fetchItems( startDate, endDate, testFilterDisplayLabel, -1, [sortDescending], fetchhint , OrganizerModel.SystemStorage);
660
modelItemsFetchedSpy.wait();
661
compare(modelItemsFetchedSpy.count, 1)
662
compare(organizerModel.testFetchedItems.length, 0);
666
utility.empty_calendar();
667
compare(organizerModel.items.length, 0);
670
function test_organizermodel_containsitems_data() {
672
{tag: "memory backend", managerToBeTested: "memory"},
673
{tag: "jsondb backend", managerToBeTested: "jsondb"}
677
function test_organizermodel_containsitems(data) {
678
var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
679
+ "import QtOrganizer 5.0\n"
680
+ "OrganizerModel {\n"
681
+ " manager: '" + data.managerToBeTested + "'\n"
682
+ " startPeriod: new Date(2011, 12, 8, 14, 0)\n"
683
+ " endPeriod: new Date(2011, 12, 8, 16, 0)\n"
684
+ "}\n", modelTests);
685
utility.init(organizerModel)
686
utility.waitModelChange()
687
utility.empty_calendar()
689
var event1 = utility.create_testobject("import QtQuick 2.0\n"
690
+ "import QtOrganizer 5.0\n"
692
+ " startDateTime: new Date(2011, 12, 8, 13, 55)\n"
693
+ " endDateTime: new Date(2011, 12, 8, 14, 07)\n"
694
+ "}\n", modelTests);
696
var event2 = utility.create_testobject("import QtQuick 2.0\n"
697
+ "import QtOrganizer 5.0\n"
699
+ " startDateTime: new Date(2011, 12, 8, 14, 11)\n"
700
+ " endDateTime: new Date(2011, 12, 8, 14, 15)\n"
701
+ "}\n", modelTests);
703
var todo3 = utility.create_testobject("import QtQuick 2.0\n"
704
+ "import QtOrganizer 5.0\n"
706
+ " startDateTime: new Date(2011, 12, 8, 14, 25, 0)\n"
707
+ "}\n", modelTests);
709
var todo4 = utility.create_testobject("import QtQuick 2.0\n"
710
+ "import QtOrganizer 5.0\n"
712
+ " dueDateTime: new Date(2011, 12, 8, 14, 45)\n"
713
+ "}\n", modelTests);
715
var event5 = utility.create_testobject("import QtQuick 2.0\n"
716
+ "import QtOrganizer 5.0\n"
718
+ " startDateTime: new Date(2011, 12, 8, 14, 55)\n"
719
+ " endDateTime: new Date(2011, 12, 8, 15, 05)\n"
720
+ "}\n", modelTests);
722
organizerModel.saveItem(event1);
723
utility.waitModelChange()
724
organizerModel.saveItem(event2);
725
utility.waitModelChange()
726
organizerModel.saveItem(todo3);
727
utility.waitModelChange()
728
organizerModel.saveItem(todo4);
729
utility.waitModelChange()
730
organizerModel.saveItem(event5);
731
utility.waitModelChange()
732
compare(organizerModel.items.length, 5);
734
var containsItems = organizerModel.containsItems(new Date(2011, 12, 8, 14, 0), new Date(2011, 12, 8, 16, 0), 600);
735
compare(containsItems.length, 12);
736
compare(containsItems[0], true);
737
compare(containsItems[1], true);
738
compare(containsItems[2], true);
739
compare(containsItems[3], false);
740
compare(containsItems[4], true);
741
compare(containsItems[5], true);
742
compare(containsItems[6], true);
743
compare(containsItems[7], false);
744
compare(containsItems[8], false);
745
compare(containsItems[9], false);
746
compare(containsItems[10], false);
747
compare(containsItems[11], false);
750
function test_organizermodel_containsitems2_data() {
752
{tag: "memory backend", managerToBeTested: "memory"},
753
{tag: "jsondb backend", managerToBeTested: "jsondb"}
757
function test_organizermodel_containsitems2(data) {
758
var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
759
+ "import QtOrganizer 5.0\n"
760
+ "OrganizerModel {\n"
761
+ " manager: '" + data.managerToBeTested + "'\n"
762
+ " startPeriod: new Date(2011, 12, 7)\n"
763
+ " endPeriod: new Date(2011, 12, 9)\n"
764
+ "}\n", modelTests);
765
utility.init(organizerModel)
766
utility.waitModelChange()
767
utility.empty_calendar()
769
var event00 = utility.create_testobject("import QtQuick 2.0\n"
770
+ "import QtOrganizer 5.0\n"
772
+ " startDateTime: new Date(2011, 12, 7, 11)\n"
773
+ " endDateTime: new Date(2011, 12, 8, 0, 30)\n"
774
+ "}\n", modelTests);
776
var event0 = utility.create_testobject("import QtQuick 2.0\n"
777
+ "import QtOrganizer 5.0\n"
779
+ " startDateTime: new Date(2011, 12, 8, 1)\n"
780
+ "}\n", modelTests);
782
var event1 = utility.create_testobject("import QtQuick 2.0\n"
783
+ "import QtOrganizer 5.0\n"
785
+ " startDateTime: new Date(2011, 12, 8, 3)\n"
786
+ " endDateTime: new Date(2011, 12, 8, 3, 30)\n"
787
+ "}\n", modelTests);
789
var event2 = utility.create_testobject("import QtQuick 2.0\n"
790
+ "import QtOrganizer 5.0\n"
792
+ " startDateTime: new Date(2011, 12, 8, 5)\n"
793
+ " endDateTime: new Date(2011, 12, 8, 6)\n"
794
+ "}\n", modelTests);
797
var event3 = utility.create_testobject("import QtQuick 2.0\n"
798
+ "import QtOrganizer 5.0\n"
800
+ " startDateTime: new Date(2011, 12, 8, 8)\n"
801
+ " endDateTime: new Date(2011, 12, 8, 10)\n"
802
+ "}\n", modelTests);
804
var event4 = utility.create_testobject("import QtQuick 2.0\n"
805
+ "import QtOrganizer 5.0\n"
807
+ " startDateTime: new Date(2011, 12, 8, 11, 30)\n"
808
+ " endDateTime: new Date(2011, 12, 8, 12)\n"
809
+ "}\n", modelTests);
811
var event5 = utility.create_testobject("import QtQuick 2.0\n"
812
+ "import QtOrganizer 5.0\n"
814
+ " startDateTime: new Date(2011, 12, 8, 13)\n"
815
+ " endDateTime: new Date(2011, 12, 8, 13, 30)\n"
816
+ "}\n", modelTests);
818
compare(organizerModel.items.length, 0);
819
organizerModel.saveItem(event00);
820
utility.waitModelChange()
821
organizerModel.saveItem(event0);
822
utility.waitModelChange()
823
organizerModel.saveItem(event1);
824
utility.waitModelChange()
825
organizerModel.saveItem(event2);
826
utility.waitModelChange()
827
organizerModel.saveItem(event3);
828
utility.waitModelChange()
829
organizerModel.saveItem(event4);
830
utility.waitModelChange()
831
organizerModel.saveItem(event5);
832
utility.waitModelChange()
833
compare(organizerModel.items.length, 7);
835
var containsItems = organizerModel.containsItems(new Date(2011, 12, 8), new Date(2011, 12, 8, 13), 3600);
837
compare(containsItems.length, 13);
838
compare(containsItems[0], true);
839
compare(containsItems[1], true);
840
compare(containsItems[2], false);
841
compare(containsItems[3], true);
842
compare(containsItems[4], false);
843
compare(containsItems[5], true);
844
compare(containsItems[6], false);
845
compare(containsItems[7], false);
846
compare(containsItems[8], true);
847
compare(containsItems[9], true);
848
compare(containsItems[10], false);
849
compare(containsItems[11], true);
850
compare(containsItems[12], false);
853
function modelChangedSignalTestItems() {
856
"import QtOrganizer 5.0 \n"
858
+ " startDateTime:'2011-10-25'\n"
859
+ " endDateTime:'2011-10-26'\n"
862
"import QtOrganizer 5.0 \n"
864
+ " startDateTime:'2011-10-26'\n"
865
+ " endDateTime:'2011-10-27'\n"
871
// to test various usecases for modelChanged-signal
872
function test_modelChangedSignal() {
873
var managerlist = utility.getManagerList();
874
if (managerlist.length < 0) {
875
console.log("No manager to test");
878
for (var i = 0; i < managerlist.length; i ++) {
880
var filter = Qt.createQmlObject("import QtOrganizer 5.0; DetailFieldFilter{}", modelTests)
881
filter.detail = Detail.EventTime
882
filter.field = EventTime.FieldAllDay
885
var model = Qt.createQmlObject(
886
"import QtOrganizer 5.0;"
888
+ " manager: \"qtorganizer:" + managerlist[i] + ":id=qml\";"
889
+ " startPeriod:'2009-01-01';"
890
+ " endPeriod:'2012-12-31';"
891
+ " autoUpdate:true; }"
893
console.log("## Testing plugin: " + managerlist[i]);
894
var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
895
modelChangedSpy.target = model
896
modelChangedSpy.signalName = "modelChanged"
898
// during initialisation only one modelChanged allowed
899
wait(signalWaitTime);
900
compare(modelChangedSpy.count, 1)
902
// prepare for rest of cases
904
utility.empty_calendar()
905
utility.addItemsToModel(modelChangedSignalTestItems(), modelTests)
906
compare(model.itemCount, 2)
908
// after filterchange only one modelChanged allowed
909
modelChangedSpy.clear()
910
model.filter = filter
911
wait(signalWaitTime);
912
compare(modelChangedSpy.count, 1)
913
compare(model.itemCount, 1)
915
// after manual update only one modelChanged allowed
916
model.autoUpdate = false
917
modelChangedSpy.clear()
920
wait(signalWaitTime);
921
compare(modelChangedSpy.count, 1)
922
compare(model.itemCount, 2)
923
utility.empty_calendar()
927
function test_updateMethods() {
928
var managerlist = utility.getManagerList();
929
if (managerlist.length < 0) {
930
console.log("No manager to test");
933
for (var i = 0; i < managerlist.length; i ++) {
934
var organizerModel = Qt.createQmlObject(
935
"import QtOrganizer 5.0;"
937
+ " manager: '" + managerlist[i] + "'\n"
938
+ " startPeriod:'2009-01-01'\n"
939
+ " endPeriod:'2012-12-31'\n"
942
console.log("## Testing plugin: " + managerlist[i]);
944
utility.init(organizerModel);
945
utility.waitModelChange();
946
utility.empty_calendar();
948
var event1 = utility.create_testobject(
949
"import QtOrganizer 5.0\n"
951
+ " startDateTime: new Date(2011, 12, 7, 11)\n"
952
+ " endDateTime: new Date(2011, 12, 8, 0, 30)\n"
953
+ "}\n", modelTests);
954
var event2 = utility.create_testobject(
955
"import QtOrganizer 5.0\n"
957
+ " startDateTime: new Date(2011, 13, 7, 11)\n"
958
+ " endDateTime: new Date(2011, 13, 8, 0, 30)\n"
959
+ "}\n", modelTests);
961
var collection1 = utility.create_testobject("import QtQuick 2.0 \n"
962
+ "import QtOrganizer 5.0\n"
965
+ "}\n", modelTests);
967
var collection2 = utility.create_testobject("import QtQuick 2.0 \n"
968
+ "import QtOrganizer 5.0\n"
971
+ "}\n", modelTests);
973
var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
974
modelChangedSpy.target = organizerModel
975
modelChangedSpy.signalName = "modelChanged"
976
var collectionsChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
977
collectionsChangedSpy.target = organizerModel
978
collectionsChangedSpy.signalName = "collectionsChanged"
980
organizerModel.autoUpdate = false;
983
compare(organizerModel.items.length, 0);
984
compare(organizerModel.collections.length, 1);
986
// updateItems() - should update only items
987
organizerModel.saveItem(event1);
988
organizerModel.saveCollection(collection1);
990
compare(modelChangedSpy.count, 0)
991
compare(collectionsChangedSpy.count, 0)
992
compare(organizerModel.items.length, 0)
993
compare(organizerModel.collections.length, 1)
994
organizerModel.updateItems();
995
modelChangedSpy.wait(signalWaitTime)
996
compare(modelChangedSpy.count, 1)
997
compare(collectionsChangedSpy.count, 0)
998
compare(organizerModel.items.length, 1)//+1
999
compare(organizerModel.collections.length, 1)// collection change not visible, only default collection visible
1001
// updateCollections() - should update only collections
1002
modelChangedSpy.clear();
1003
collectionsChangedSpy.clear();
1004
organizerModel.saveItem(event2);
1005
// - there is saved unseen collection from updateItems()-test
1006
wait(signalWaitTime)
1007
compare(modelChangedSpy.count, 0)
1008
compare(collectionsChangedSpy.count, 0)
1009
organizerModel.updateCollections();
1010
collectionsChangedSpy.wait(signalWaitTime)
1011
compare(modelChangedSpy.count, 0)
1012
compare(collectionsChangedSpy.count, 1)
1013
compare(organizerModel.items.length, 1)// event2 not visible, only event1 saved in updateItems()-test visible
1014
compare(organizerModel.collections.length, 2)//+1
1016
// update() - should update both
1017
modelChangedSpy.clear();
1018
collectionsChangedSpy.clear();
1019
// - there is saved unseen item from updateCollections()-test
1020
organizerModel.saveCollection(collection2);
1021
wait(signalWaitTime)
1022
compare(modelChangedSpy.count, 0)
1023
compare(collectionsChangedSpy.count, 0)
1024
organizerModel.update();
1025
modelChangedSpy.wait(signalWaitTime)
1026
compare(modelChangedSpy.count, 1)
1027
compare(collectionsChangedSpy.count, 1)
1028
compare(organizerModel.items.length, 2)//+1
1029
compare(organizerModel.collections.length, 3)//+1
1031
modelChangedSpy.destroy();
1032
collectionsChangedSpy.destroy();
1033
organizerModel.destroy();
1037
function test_updateMethodsStartWithAutoupdateFalse() {
1039
var organizerModel = Qt.createQmlObject(
1040
"import QtOrganizer 5.0;"
1041
+ "OrganizerModel {"
1042
+ " manager: 'jsondb'\n"
1043
+ " startPeriod:'2009-01-01'\n"
1044
+ " endPeriod:'2012-12-31'\n"
1045
+ " autoUpdate: false\n"
1048
console.log("## Testing only jsondb-plugin");
1050
var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
1051
modelChangedSpy.target = organizerModel
1052
modelChangedSpy.signalName = "modelChanged"
1053
var collectionsChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
1054
collectionsChangedSpy.target = organizerModel
1055
collectionsChangedSpy.signalName = "collectionsChanged"
1057
// After test_updateMethods()-test there should be
1058
// 2 items and 2 collections (+ default collection)
1059
// on the jsondb. They're just not visible, since
1060
// autoUpdate is false.
1061
compare(organizerModel.items.length, 0);
1062
compare(organizerModel.collections.length, 0);
1064
// Check we see still only collections after updating collections
1065
organizerModel.updateCollections();
1066
collectionsChangedSpy.wait(signalWaitTime)
1067
compare(organizerModel.items.length, 0);
1068
compare(organizerModel.collections.length, 3);// 2 + default collection
1070
// Save there item with other collection than default collection
1071
var event = utility.create_testobject(
1072
"import QtOrganizer 5.0\n"
1074
+ " startDateTime: new Date(2011, 12, 7, 11)\n"
1075
+ " endDateTime: new Date(2011, 12, 8, 0, 30)\n"
1076
+ "}\n", modelTests);
1077
for (var i = 0; i < organizerModel.collections.length; ++i) {
1078
var collId = organizerModel.collections[i].collectionId;
1079
if (collId != organizerModel.defaultCollection().collectionId) {
1080
event.collectionId = collId;
1083
organizerModel.saveItem(event);
1084
wait(signalWaitTime)
1086
// Create collection filter and check that only the item with that collection is visible
1087
var collectionFilter = Qt.createQmlObject("import QtOrganizer 5.0;CollectionFilter{}", modelTests);
1088
collectionFilter.ids = [event.collectionId];
1089
organizerModel.filter = collectionFilter;
1090
organizerModel.updateItems();
1091
modelChangedSpy.wait(signalWaitTime)
1092
compare(organizerModel.items.length, 1);// 1 with that collection
1094
// Lastly check we get everything if filter is reset
1095
organizerModel.filter = null;
1096
organizerModel.updateItems();
1097
modelChangedSpy.wait(signalWaitTime)
1098
compare(organizerModel.items.length, 3); // all items
1101
utility.init(organizerModel);
1102
utility.empty_calendar();
1104
collectionFilter.destroy();
1105
modelChangedSpy.destroy();
1106
collectionsChangedSpy.destroy();
1107
organizerModel.destroy();