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 test suite of the Qt Toolkit.
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
#include <QtTest/QtTest>
44
#include "qorganizer.h"
46
//TESTED_COMPONENT=src/organizer
48
QTORGANIZER_USE_NAMESPACE
49
class tst_QOrganizerItemDetails : public QObject
54
tst_QOrganizerItemDetails();
55
virtual ~tst_QOrganizerItemDetails();
83
void audibleReminder();
85
void visualReminder();
89
void classification();
93
tst_QOrganizerItemDetails::tst_QOrganizerItemDetails()
97
tst_QOrganizerItemDetails::~tst_QOrganizerItemDetails()
101
void tst_QOrganizerItemDetails::init()
105
void tst_QOrganizerItemDetails::cleanup()
110
void tst_QOrganizerItemDetails::description()
112
QOrganizerItemDescription d1;
114
QVERIFY(d1.description().isEmpty());
115
QVERIFY(d1.value(QOrganizerItemDescription::FieldDescription).isNull());
116
d1.setValue(QOrganizerItemDescription::FieldDescription, "Test");
117
QVERIFY(d1.value(QOrganizerItemDescription::FieldDescription) == QString("Test"));
118
QVERIFY(d1.description() == QString("Test"));
120
QOrganizerItemDescription d2;
121
d2.setValue(QOrganizerItemDescription::FieldDescription, "Test 2");
123
// test property add -- description is unique.
124
QVERIFY(oi.saveDetail(&d2));
125
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 1); // count should be 1
126
QVERIFY(oi.saveDetail(&d1));
127
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 1); // count should be 1
129
// test property update
130
d1.setDescription("Test 3");
131
QVERIFY(oi.saveDetail(&d1));
132
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 1); // count should be 1
133
QVERIFY(oi.detail(QOrganizerItemDetail::TypeDescription).value(QOrganizerItemDescription::FieldDescription) == QString("Test 3"));
135
// test property remove
136
QVERIFY(oi.removeDetail(&d1));
137
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 0);
140
void tst_QOrganizerItemDetails::displayLabel()
142
QOrganizerItemDisplayLabel d1;
145
QVERIFY(d1.label().isEmpty());
146
QVERIFY(d1.value(QOrganizerItemDisplayLabel::FieldLabel).isNull());
147
d1.setValue(QOrganizerItemDisplayLabel::FieldLabel, "Test");
148
QVERIFY(d1.value(QOrganizerItemDisplayLabel::FieldLabel) == QString("Test"));
149
QVERIFY(d1.label() == QString("Test"));
151
QOrganizerItemDisplayLabel d2;
152
d2.setValue(QOrganizerItemDisplayLabel::FieldLabel, "Test 2");
154
// test property add - should update.
155
QVERIFY(oi.saveDetail(&d2));
156
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 1);
157
QVERIFY(oi.saveDetail(&d1));
158
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 1);
160
// test property update - should update
161
d1.setLabel("Test 3");
162
QVERIFY(oi.saveDetail(&d1));
163
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 1);
164
QVERIFY(oi.detail(QOrganizerItemDetail::TypeDisplayLabel).value(QOrganizerItemDisplayLabel::FieldLabel) == QString("Test 3"));
166
// test property remove
167
QVERIFY(oi.removeDetail(&d1)); // can remove display label. it's unique but not required.
168
QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 0);
172
void tst_QOrganizerItemDetails::guid()
175
QOrganizerItemGuid g1, g2;
179
QCOMPARE(g1.guid(), QString("1234"));
180
QCOMPARE(g1.value(QOrganizerItemGuid::FieldGuid).toString(), QString("1234"));
183
QVERIFY(oi.saveDetail(&g1));
184
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 1);
185
QCOMPARE(QOrganizerItemGuid(oi.details(QOrganizerItemDetail::TypeGuid).value(0)).guid(), g1.guid());
187
// test property update
188
g1.setValue(101,"label1");
190
QVERIFY(oi.saveDetail(&g1));
191
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).value(0).value(101).toString(), QString("label1"));
192
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).value(0).value(QOrganizerItemGuid::FieldGuid).toString(), QString("12345"));
194
// test property remove
195
QVERIFY(oi.removeDetail(&g1));
196
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 0);
197
QVERIFY(oi.saveDetail(&g2));
198
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 1);
199
QVERIFY(oi.removeDetail(&g2));
200
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 0);
201
QVERIFY(oi.removeDetail(&g2) == false);
202
QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 0);
205
void tst_QOrganizerItemDetails::location()
207
QOrganizerItemLocation l1;
209
QVERIFY(l1.isEmpty());
211
l1.setLatitude(89.999);
212
QVERIFY(!l1.isEmpty());
213
QVERIFY(l1.latitude() == 89.999);
214
l1.setValue(QOrganizerItemLocation::FieldLatitude, -89.12345);
215
QVERIFY(l1.value(QOrganizerItemLocation::FieldLatitude) == -89.12345);
216
l1.setLatitude(-90.12345);
218
QVERIFY(l1.latitude() == -89.12345);
220
l1.setLongitude(179);
221
QVERIFY(l1.longitude() == 179);
222
l1.setValue(QOrganizerItemLocation::FieldLongitude, -179.54321);
223
QVERIFY(l1.value(QOrganizerItemLocation::FieldLongitude) == -179.54321);
224
l1.setLongitude(180.1);
225
l1.setLongitude(-180.1);
226
QVERIFY(l1.longitude() == -179.54321);
229
QVERIFY(l1.label() == QString("test"));
231
QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 0);
232
QVERIFY(oi.saveDetail(&l1));
233
QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 1);
234
QVERIFY(oi.detail(QOrganizerItemDetail::TypeLocation) == l1);
236
l1.setLabel("test 2");
237
QVERIFY(oi.detail(QOrganizerItemDetail::TypeLocation) != l1);
238
QVERIFY(oi.saveDetail(&l1)); // update.
239
QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 1); // should update, not add another.
240
QVERIFY(oi.detail(QOrganizerItemDetail::TypeLocation) == l1);
242
oi.removeDetail(&l1);
243
QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 0);
246
void tst_QOrganizerItemDetails::parent()
248
QOrganizerItemParent p;
251
// hrm, how to test parent local id?
253
QVERIFY(p.isEmpty());
254
p.setOriginalDate(QDate(2010, 10, 13));
255
QVERIFY(p.originalDate() == QDate(2010, 10, 13));
256
QVERIFY(!p.isEmpty());
258
QVERIFY(oi.saveDetail(&p));
259
QVERIFY(oi.details(QOrganizerItemDetail::TypeParent).size() == 1);
260
QVERIFY(oi.detail(QOrganizerItemDetail::TypeParent) == p);
262
p.setOriginalDate(QDate(2010, 10, 14));
263
QVERIFY(oi.detail(QOrganizerItemDetail::TypeParent) != p);
264
QVERIFY(oi.saveDetail(&p)); // update
265
QVERIFY(oi.detail(QOrganizerItemDetail::TypeParent) == p);
267
QVERIFY(oi.removeDetail(&p));
268
QVERIFY(oi.details(QOrganizerItemDetail::TypeParent).size() == 0);
271
void tst_QOrganizerItemDetails::priority()
273
QOrganizerItemPriority p;
276
QVERIFY(p.isEmpty());
277
p.setValue(QOrganizerItemPriority::FieldPriority, QOrganizerItemPriority::VeryHighPriority);
278
QVERIFY(p.priority() == QOrganizerItemPriority::VeryHighPriority);
279
QVERIFY(oi.saveDetail(&p));
280
QVERIFY(oi.details(QOrganizerItemDetail::TypePriority).size() == 1);
281
QVERIFY(oi.detail(QOrganizerItemDetail::TypePriority) == p);
283
p.setPriority(QOrganizerItemPriority::VeryLowPriority);
284
QVERIFY(oi.detail(QOrganizerItemDetail::TypePriority) != p);
285
QVERIFY(oi.saveDetail(&p));
286
QVERIFY(oi.details(QOrganizerItemDetail::TypePriority).size() == 1); // update shouldn't add another detail.
287
QVERIFY(oi.detail(QOrganizerItemDetail::TypePriority) == p);
289
QVERIFY(oi.removeDetail(&p));
290
QVERIFY(oi.details(QOrganizerItemDetail::TypePriority).size() == 0);
293
void tst_QOrganizerItemDetails::recurrence()
295
QOrganizerItemRecurrence r;
298
QOrganizerRecurrenceRule testRule;
299
testRule.setFrequency(QOrganizerRecurrenceRule::Weekly);
300
testRule.setLimit(4);
301
QSet<QOrganizerRecurrenceRule> rrules;
304
QOrganizerRecurrenceRule exrule;
305
exrule.setFrequency(QOrganizerRecurrenceRule::Daily);
306
testRule.setLimit(12);
307
QSet<QOrganizerRecurrenceRule> exrules;
310
QSet<QDate> rdates, exdates;
311
rdates << QDate(2010, 10, 13);
312
exdates << QDate(2010, 11, 17) << QDate(2010, 11, 20);
314
QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 0);
315
r.setRecurrenceRules(rrules);
316
QVERIFY(r.recurrenceRules() == rrules);
317
QVERIFY(r.recurrenceDates().isEmpty());
318
QVERIFY(r.exceptionRules().isEmpty());
320
r.setExceptionRules(exrules);
321
QVERIFY(r.recurrenceRules() == rrules);
322
QVERIFY(r.exceptionRules() == exrules);
323
QVERIFY(r.exceptionDates().isEmpty());
325
r.setRecurrenceDates(rdates);
326
QVERIFY(r.recurrenceDates() == rdates);
327
QVERIFY(r.exceptionDates().isEmpty());
328
QVERIFY(r.recurrenceRules() == rrules);
329
QVERIFY(r.exceptionRules() == exrules);
331
r.setExceptionDates(exdates);
332
QVERIFY(r.recurrenceDates() == rdates);
333
QVERIFY(r.exceptionDates() == exdates);
334
QVERIFY(r.recurrenceRules() == rrules);
335
QVERIFY(r.exceptionRules() == exrules);
338
QVERIFY(e.saveDetail(&r));
339
QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 1);
340
QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) == r);
343
exdates << QDate(2010, 10, 17);
344
r.setExceptionDates(exdates);
345
QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) != r);
346
QVERIFY(e.saveDetail(&r));
347
QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) == r);
348
QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 1); // should update, not add another.
351
QVERIFY(e.removeDetail(&r));
352
QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 0);
355
void tst_QOrganizerItemDetails::tag()
358
QOrganizerItemTag t1, t2;
362
QCOMPARE(t1.tag(), QString("red"));
363
QCOMPARE(t1.value(QOrganizerItemTag::FieldTag).toString(), QString("red"));
366
QVERIFY(oi.saveDetail(&t1));
367
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 1);
368
QCOMPARE(QOrganizerItemTag(oi.details(QOrganizerItemDetail::TypeTag).value(0)).tag(), t1.tag());
369
QVERIFY(oi.saveDetail(&t2));
370
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 2);
372
// test property update
373
t1.setValue(101,"label1");
375
QVERIFY(oi.saveDetail(&t1));
376
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).value(0).value(101).toString(), QString("label1"));
377
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).value(0).value(QOrganizerItemTag::FieldTag).toString(), QString("green"));
379
// test property remove
380
QVERIFY(oi.removeDetail(&t1));
381
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 1);
382
QVERIFY(oi.removeDetail(&t2));
383
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 0);
384
QVERIFY(oi.removeDetail(&t2) == false);
385
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 0);
389
void tst_QOrganizerItemDetails::timestamp()
392
QOrganizerItemTimestamp t1, t2;
393
QDateTime modified = QDateTime::currentDateTime();
394
QDateTime created = modified.addSecs(-43);
397
t1.setCreated(created);
398
QCOMPARE(t1.created(), created);
399
QCOMPARE(t1.value(QOrganizerItemTimestamp::FieldCreated).toDateTime(), created);
402
QVERIFY(oi.saveDetail(&t1));
403
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 1);
404
QCOMPARE(QOrganizerItemTimestamp(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0)).created(), t1.created());
406
// test property update
407
t1.setValue(101,"label1");
408
t1.setLastModified(modified);
409
QVERIFY(oi.saveDetail(&t1));
410
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0).value(101).toString(), QString("label1"));
411
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0).value(QOrganizerItemTimestamp::FieldCreated).toDateTime(), created);
412
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0).value(QOrganizerItemTimestamp::FieldLastModified).toDateTime(), modified);
414
// test property remove
415
QVERIFY(oi.removeDetail(&t1));
416
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 0);
417
t2.setCreated(created.addSecs(15));
418
QVERIFY(oi.saveDetail(&t2));
419
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 1);
420
QVERIFY(oi.removeDetail(&t2));
421
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 0);
422
QVERIFY(oi.removeDetail(&t2) == false);
423
QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 0);
426
void tst_QOrganizerItemDetails::todoProgress()
428
QOrganizerTodoProgress p;
431
QVERIFY(p.status() == QOrganizerTodoProgress::StatusNotStarted);
432
QVERIFY(p.isEmpty());
433
p.setStatus(QOrganizerTodoProgress::StatusInProgress);
434
QVERIFY(!p.isEmpty());
435
QVERIFY(p.status() == QOrganizerTodoProgress::StatusInProgress);
437
p.setPercentageComplete(50);
438
QVERIFY(p.percentageComplete() == 50);
439
p.setPercentageComplete(200); // this should fail
440
QVERIFY(p.percentageComplete() == 50); // value should remain unchanged.
442
p.setFinishedDateTime(QDateTime(QDate(2010, 10, 13)));
443
QVERIFY(p.finishedDateTime() == QDateTime(QDate(2010, 10, 13)));
444
QVERIFY(p.status() != QOrganizerTodoProgress::StatusComplete); // XXX TODO: should this be automatic?
445
p.setPercentageComplete(100);
446
QVERIFY(p.percentageComplete() == 100);
447
QVERIFY(p.status() != QOrganizerTodoProgress::StatusComplete); // XXX TODO: should this be automatic?
450
QVERIFY(t.saveDetail(&p));
451
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoProgress).size() == 1);
452
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoProgress) == p);
455
p.setStatus(QOrganizerTodoProgress::StatusComplete);
456
QVERIFY(p.status() == QOrganizerTodoProgress::StatusComplete);
457
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoProgress) != p);
458
QVERIFY(t.saveDetail(&p));
459
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoProgress).size() == 1); // update, not add another
460
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoProgress) == p);
463
QVERIFY(t.removeDetail(&p));
464
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoProgress).size() == 0);
467
void tst_QOrganizerItemDetails::type()
470
QOrganizerItemType t1, t2;
476
QOrganizerEventOccurrence eo;
477
QOrganizerTodoOccurrence to;
478
QVERIFY(e.type() == QOrganizerItemType::TypeEvent);
479
QVERIFY(n.type() == QOrganizerItemType::TypeNote);
480
QVERIFY(t.type() == QOrganizerItemType::TypeTodo);
481
QVERIFY(j.type() == QOrganizerItemType::TypeJournal);
482
QVERIFY(eo.type() == QOrganizerItemType::TypeEventOccurrence);
483
QVERIFY(to.type() == QOrganizerItemType::TypeTodoOccurrence);
486
t1.setType(QOrganizerItemType::TypeEvent);
487
QCOMPARE(t1.type(), QOrganizerItemType::TypeEvent);
488
QCOMPARE(static_cast<QOrganizerItemType::ItemType>(t1.value(QOrganizerItemType::FieldType).toInt()), QOrganizerItemType::TypeEvent);
491
QVERIFY(oi.saveDetail(&t1));
492
QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
493
QCOMPARE(QOrganizerItemType(oi.details(QOrganizerItemDetail::TypeItemType).value(0)).type(), t1.type());
495
// test property update
496
t1.setType(QOrganizerItemType::TypeTodo);
497
QVERIFY(oi.saveDetail(&t1));
498
QCOMPARE(static_cast<QOrganizerItemType::ItemType>(oi.details(QOrganizerItemDetail::TypeItemType).value(0).value(QOrganizerItemType::FieldType).toInt()), QOrganizerItemType::TypeTodo);
500
// test property remove
501
QVERIFY(!oi.removeDetail(&t1)); // cannot remove type
502
QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
503
t2.setType(QOrganizerItemType::TypeNote);
504
QVERIFY(oi.saveDetail(&t2)); // overwrites t1
505
QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
506
QVERIFY(!oi.removeDetail(&t2)); // cannot remove type - "succeeds" but count remains unchanged
507
QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
508
QVERIFY(!oi.removeDetail(&t2));
509
QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
513
void tst_QOrganizerItemDetails::eventTime()
515
QOrganizerEventTime r;
518
QVERIFY(r.isEmpty());
519
QVERIFY(!r.isAllDay());
521
r.setStartDateTime(QDateTime(QDate(2010, 10, 13)));
522
QVERIFY(r.startDateTime() == QDateTime(QDate(2010, 10, 13)));
523
QVERIFY(!r.isAllDay());
525
QVERIFY(r.isAllDay());
527
r.setEndDateTime(QDateTime(QDate(2010, 10, 14)));
528
QVERIFY(r.endDateTime() == QDateTime(QDate(2010, 10, 14)));
531
QOrganizerEventTime r2;
532
r2.setStartDateTime(QDateTime(QDate(2010, 10, 23)));
533
r2.setEndDateTime(QDateTime(QDate(2010, 10, 24)));
534
QVERIFY(e.saveDetail(&r));
535
QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 1);
536
QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) == r);
537
QVERIFY(e.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager!
538
QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 2);
539
QVERIFY(e.removeDetail(&r2));
540
QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 1);
541
QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) == r);
545
QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) != r);
546
QVERIFY(e.saveDetail(&r));
547
QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) == r);
548
QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 1);
551
QVERIFY(e.removeDetail(&r));
552
QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 0);
555
void tst_QOrganizerItemDetails::journalTime()
557
QOrganizerJournalTime r;
560
QVERIFY(r.isEmpty());
561
r.setEntryDateTime(QDateTime(QDate(2010, 10, 13)));
562
QVERIFY(r.entryDateTime() == QDateTime(QDate(2010, 10, 13)));
565
QOrganizerJournalTime r2;
566
r2.setEntryDateTime(QDateTime(QDate(2010, 10, 23)));
567
QVERIFY(j.saveDetail(&r));
568
QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 1);
569
QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) == r);
570
QVERIFY(j.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager!
571
QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 2);
572
QVERIFY(j.removeDetail(&r2));
573
QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 1);
574
QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) == r);
577
r.setEntryDateTime(QDateTime(QDate(2010, 11, 05)));
578
QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) != r);
579
QVERIFY(j.saveDetail(&r));
580
QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) == r);
581
QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 1);
584
QVERIFY(j.removeDetail(&r));
585
QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 0);
588
void tst_QOrganizerItemDetails::todoTime()
590
QOrganizerTodoTime r;
593
QVERIFY(r.isEmpty());
594
QVERIFY(!r.isAllDay());
596
r.setStartDateTime(QDateTime(QDate(2010, 10, 13)));
597
QVERIFY(r.startDateTime() == QDateTime(QDate(2010, 10, 13)));
598
QVERIFY(!r.isAllDay());
600
QVERIFY(r.isAllDay());
602
r.setDueDateTime(QDateTime(QDate(2010, 10, 14)));
603
QVERIFY(r.dueDateTime() == QDateTime(QDate(2010, 10, 14)));
606
QOrganizerTodoTime r2;
607
r2.setStartDateTime(QDateTime(QDate(2010, 10, 23)));
608
r2.setDueDateTime(QDateTime(QDate(2010, 10, 24)));
609
QVERIFY(t.saveDetail(&r));
610
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 1);
611
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) == r);
612
QVERIFY(t.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager!
613
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 2);
614
QVERIFY(t.removeDetail(&r2));
615
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 1);
616
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) == r);
620
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) != r);
621
QVERIFY(t.saveDetail(&r));
622
QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) == r);
623
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 1);
626
QVERIFY(t.removeDetail(&r));
627
QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 0);
630
void tst_QOrganizerItemDetails::reminder()
632
QOrganizerItemReminder r;
635
QVERIFY(r.isEmpty());
636
QVERIFY(r.reminderType() == QOrganizerItemReminder::NoReminder);
638
QVERIFY(r.secondsBeforeStart() == 0);
639
QVERIFY(r.repetitionCount() == 0);
640
QVERIFY(r.repetitionDelay() == 0);
642
r.setSecondsBeforeStart(45);
643
QVERIFY(!r.isEmpty());
644
r.removeValue(QOrganizerItemReminder::FieldSecondsBeforeStart);
645
QVERIFY(r.isEmpty());
647
r.setRepetition(3, 100);
648
QVERIFY(r.repetitionCount() == 3);
649
QVERIFY(r.repetitionDelay() == 100);
650
QVERIFY(!r.isEmpty());
652
r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
653
QVERIFY(r.secondsBeforeStart() == 30);
656
QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 0);
657
QVERIFY(oi.saveDetail(&r));
658
QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 1);
659
QVERIFY(oi.detail(QOrganizerItemDetail::TypeReminder) == r);
662
r.setSecondsBeforeStart(300);
663
QVERIFY(oi.detail(QOrganizerItemDetail::TypeReminder) != r);
664
QVERIFY(oi.saveDetail(&r));
665
QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 1); // should update, not add another
666
QVERIFY(oi.detail(QOrganizerItemDetail::TypeReminder) == r);
669
QVERIFY(oi.removeDetail(&r));
670
QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 0);
673
void tst_QOrganizerItemDetails::audibleReminder()
675
QOrganizerItemAudibleReminder r;
678
QVERIFY(r.isEmpty());
679
QVERIFY(r.reminderType() == QOrganizerItemReminder::AudibleReminder);
681
QVERIFY(r.secondsBeforeStart() == 0);
682
QVERIFY(r.repetitionCount() == 0);
683
QVERIFY(r.repetitionDelay() == 0);
685
r.setSecondsBeforeStart(45);
686
QVERIFY(!r.isEmpty());
687
r.removeValue(QOrganizerItemReminder::FieldSecondsBeforeStart);
688
QVERIFY(r.isEmpty());
690
QOrganizerItemReminder baseR;
692
QVERIFY(baseR.isEmpty());
693
baseR.setSecondsBeforeStart(50);
694
QVERIFY(baseR.secondsBeforeStart() == 50);
695
QVERIFY(r.secondsBeforeStart() == 0);
696
QVERIFY(!baseR.isEmpty());
697
QVERIFY(r.isEmpty());
699
r.setRepetition(3, 100);
700
QVERIFY(r.repetitionCount() == 3);
701
QVERIFY(r.repetitionDelay() == 100);
702
QVERIFY(!r.isEmpty());
704
r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
705
QVERIFY(r.secondsBeforeStart() == 30);
708
QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 0);
709
QVERIFY(oi.saveDetail(&r));
710
QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 1);
711
QVERIFY(oi.detail(QOrganizerItemDetail::TypeAudibleReminder) == r);
714
r.setSecondsBeforeStart(300);
715
r.setDataUrl(QUrl("http://www.test.com"));
716
QVERIFY(r.dataUrl() == QUrl("http://www.test.com"));
717
QVERIFY(oi.detail(QOrganizerItemDetail::TypeAudibleReminder) != r);
718
QVERIFY(oi.saveDetail(&r));
719
QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 1); // should update, not add another
720
QVERIFY(oi.detail(QOrganizerItemDetail::TypeAudibleReminder) == r);
723
QVERIFY(oi.removeDetail(&r));
724
QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 0);
727
void tst_QOrganizerItemDetails::emailReminder()
729
QOrganizerItemEmailReminder r;
732
QVERIFY(r.isEmpty());
733
QVERIFY(r.reminderType() == QOrganizerItemReminder::EmailReminder);
735
QVERIFY(r.secondsBeforeStart() == 0);
736
QVERIFY(r.repetitionCount() == 0);
737
QVERIFY(r.repetitionDelay() == 0);
739
r.setRepetition(3, 100);
740
QVERIFY(r.repetitionCount() == 3);
741
QVERIFY(r.repetitionDelay() == 100);
742
QVERIFY(!r.isEmpty());
744
r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
745
QVERIFY(r.secondsBeforeStart() == 30);
748
QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 0);
749
QVERIFY(oi.saveDetail(&r));
750
QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 1);
751
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEmailReminder) == r);
754
r.setSecondsBeforeStart(300);
755
r.setContents("subject", "body", QVariantList());
756
r.setRecipients(QStringList() << "recipient" << "other recipient");
757
QVERIFY(r.subject() == QString("subject"));
758
QVERIFY(r.body() == QString("body"));
759
QVERIFY(r.attachments() == QVariantList());
760
QVERIFY(r.recipients() == (QStringList() << "recipient" << "other recipient"));
761
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEmailReminder) != r);
762
QVERIFY(oi.saveDetail(&r));
763
QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 1); // should update, not add another
764
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEmailReminder) == r);
767
QVERIFY(oi.removeDetail(&r));
768
QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 0);
771
void tst_QOrganizerItemDetails::visualReminder()
773
QOrganizerItemVisualReminder r;
776
QVERIFY(r.isEmpty());
777
QVERIFY(r.reminderType() == QOrganizerItemReminder::VisualReminder);
779
QVERIFY(r.secondsBeforeStart() == 0);
780
QVERIFY(r.repetitionCount() == 0);
781
QVERIFY(r.repetitionDelay() == 0);
783
r.setRepetition(3, 100);
784
QVERIFY(r.repetitionCount() == 3);
785
QVERIFY(r.repetitionDelay() == 100);
786
QVERIFY(!r.isEmpty());
788
r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
789
QVERIFY(r.secondsBeforeStart() == 30);
792
QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 0);
793
QVERIFY(oi.saveDetail(&r));
794
QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 1);
795
QVERIFY(oi.detail(QOrganizerItemDetail::TypeVisualReminder) == r);
798
r.setSecondsBeforeStart(300);
799
r.setMessage("test");
800
r.setDataUrl(QUrl("http://www.test.com"));
801
QVERIFY(r.message() == QString("test"));
802
QVERIFY(r.dataUrl() == QUrl("http://www.test.com"));
803
QVERIFY(oi.detail(QOrganizerItemDetail::TypeVisualReminder) != r);
804
QVERIFY(oi.saveDetail(&r));
805
QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 1); // should update, not add another
806
QVERIFY(oi.detail(QOrganizerItemDetail::TypeVisualReminder) == r);
809
QVERIFY(oi.removeDetail(&r));
810
QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 0);
813
void tst_QOrganizerItemDetails::attendee()
815
QOrganizerEventAttendee a;
818
QVERIFY(a.isEmpty());
819
QVERIFY(a.name().isEmpty());
820
QVERIFY(a.emailAddress().isEmpty());
821
QVERIFY(a.attendeeId().isEmpty());
822
QVERIFY(a.participationRole() == 0);
823
QVERIFY(a.participationStatus() == 0);
825
a.setAttendeeId("123456");
826
QVERIFY(a.attendeeId() == QString("123456"));
827
a.setEmailAddress("people@nokia.com");
828
QVERIFY(a.emailAddress() == QString("people@nokia.com"));
830
QVERIFY(a.name() == QString("people"));
831
a.setParticipationRole(QOrganizerEventAttendee::RoleRequiredParticipant);
832
QVERIFY(a.participationRole() == QOrganizerEventAttendee::RoleRequiredParticipant);
833
a.setParticipationStatus(QOrganizerEventAttendee::StatusAccepted);
834
QVERIFY(a.participationStatus() == QOrganizerEventAttendee::StatusAccepted);
836
QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 0);
837
QVERIFY(oi.saveDetail(&a));
838
QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 1);
839
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventAttendee) == a);
841
a.setAttendeeId("54321");
842
a.setName("newpeople");
843
a.setEmailAddress("newpeople@nokia.com");
844
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventAttendee) != a);
845
QVERIFY(oi.saveDetail(&a));
846
QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 1);
847
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventAttendee) == a);
849
// add one more attendee
850
QOrganizerEventAttendee a1;
851
a1.setAttendeeId("777777");
852
a1.setName("people1");
853
a1.setEmailAddress("people1@nokia.com");
854
QVERIFY(oi.saveDetail(&a1));
855
QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 2);
858
QVERIFY(oi.removeDetail(&a));
859
QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 1);
860
QVERIFY(oi.removeDetail(&a1));
861
QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 0);
864
void tst_QOrganizerItemDetails::rsvp()
866
QOrganizerEventRsvp rsvp;
869
QVERIFY(rsvp.isEmpty());
870
QVERIFY(rsvp.organizerName().isEmpty());
871
QVERIFY(rsvp.organizerEmail().isEmpty());
872
QVERIFY(rsvp.responseDate().isNull());
873
QVERIFY(!rsvp.responseDate().isValid());
874
QVERIFY(rsvp.responseDeadline().isNull());
875
QVERIFY(!rsvp.responseDeadline().isValid());
876
QVERIFY(rsvp.participationRole() == 0);
877
QVERIFY(rsvp.participationStatus() == 0);
878
QVERIFY(rsvp.responseRequirement() == 0);
880
rsvp.setOrganizerName("Donald Duck");
881
QVERIFY(rsvp.organizerName() == QString("Donald Duck"));
882
rsvp.setOrganizerEmail("don@duck.com");
883
QVERIFY(rsvp.organizerEmail() == QString("don@duck.com"));
884
QDate testDate(2010, 10, 10);
885
rsvp.setResponseDate(testDate);
886
QVERIFY(!rsvp.responseDate().isNull());
887
QVERIFY(rsvp.responseDate().isValid());
888
QCOMPARE(testDate, rsvp.responseDate());
889
rsvp.setResponseDeadline(testDate);
890
QVERIFY(!rsvp.responseDeadline().isNull());
891
QVERIFY(rsvp.responseDeadline().isValid());
892
QCOMPARE(testDate, rsvp.responseDeadline());
893
rsvp.setParticipationRole(QOrganizerEventAttendee::RoleOrganizer);
894
QVERIFY(rsvp.participationRole() == QOrganizerEventAttendee::RoleOrganizer);
895
rsvp.setParticipationStatus(QOrganizerEventAttendee::StatusAccepted);
896
QVERIFY(rsvp.participationStatus() == QOrganizerEventAttendee::StatusAccepted);
897
rsvp.setResponseRequirement(QOrganizerEventRsvp::ResponseRequired);
898
QVERIFY(rsvp.responseRequirement() == QOrganizerEventRsvp::ResponseRequired);
901
QCOMPARE(0, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
902
QVERIFY(oi.saveDetail(&rsvp));
903
QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
904
QVERIFY(rsvp == oi.detail(QOrganizerItemDetail::TypeEventRsvp));
907
rsvp.setOrganizerName("Mickey Mouse");
908
rsvp.setOrganizerEmail("mick@mouse.com");
909
QDate testDate2(2011, 11, 11);
910
rsvp.setResponseDate(testDate2);
911
rsvp.setResponseDeadline(testDate2);
912
rsvp.setParticipationRole(QOrganizerEventAttendee::RoleChairperson);
913
rsvp.setParticipationStatus(QOrganizerEventAttendee::StatusDelegated);
914
rsvp.setResponseRequirement(QOrganizerEventRsvp::ResponseNotRequired);
915
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventRsvp) != rsvp);
916
QVERIFY(oi.saveDetail(&rsvp));
917
QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
918
QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventRsvp) == rsvp);
920
// add another rsvp - not supported by all the backends
921
QOrganizerEventRsvp rsvp2;
922
rsvp2.setOrganizerName("Goofy");
923
QVERIFY(oi.saveDetail(&rsvp2));
924
QCOMPARE(2, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
927
QVERIFY(oi.removeDetail(&rsvp2));
928
QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
929
QVERIFY(oi.removeDetail(&rsvp));
930
QCOMPARE(0, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
933
void tst_QOrganizerItemDetails::classification()
935
QOrganizerItemClassification classification;
938
QVERIFY(classification.isEmpty());
941
classification.setClassification(QOrganizerItemClassification::AccessPublic);
942
QVERIFY(classification.classification() == QOrganizerItemClassification::AccessPublic);
943
classification.setClassification(QOrganizerItemClassification::AccessPrivate);
944
QVERIFY(classification.classification() == QOrganizerItemClassification::AccessPrivate);
945
classification.setClassification(QOrganizerItemClassification::AccessConfidential);
946
QVERIFY(classification.classification() == QOrganizerItemClassification::AccessConfidential);
949
QCOMPARE(0, oi.details(QOrganizerItemDetail::TypeClassification).size());
950
QVERIFY(oi.saveDetail(&classification));
951
QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeClassification).size());
952
QCOMPARE(classification, static_cast<QOrganizerItemClassification>(oi.detail(QOrganizerItemDetail::TypeClassification)));
955
classification.setValue(QOrganizerItemClassification::FieldClassification, QOrganizerItemClassification::AccessPrivate);
956
QVERIFY(oi.detail(QOrganizerItemDetail::TypeClassification) != classification);
957
QVERIFY(oi.saveDetail(&classification));
958
QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeClassification).size());
959
QVERIFY(oi.detail(QOrganizerItemDetail::TypeClassification) == classification);
961
// try adding another, amount of details should stay the same
962
QOrganizerItemClassification classification2;
963
classification2.setClassification(QOrganizerItemClassification::AccessConfidential);
964
QVERIFY(oi.saveDetail(&classification2));
965
QCOMPARE(oi.details(QOrganizerItemDetail::TypeClassification).size(), 1);
968
QVERIFY(oi.removeDetail(&classification2));
969
QCOMPARE(oi.details(QOrganizerItemDetail::TypeClassification).size(), 0);
972
void tst_QOrganizerItemDetails::version()
974
QOrganizerItemVersion version;
975
QCOMPARE(version.type(), QOrganizerItemDetail::TypeVersion);
976
QVERIFY(!version.hasValue(QOrganizerItemVersion::FieldVersion));
977
QVERIFY(!version.hasValue(QOrganizerItemVersion::FieldExtendedVersion));
979
version.setVersion(64);
980
QCOMPARE(version.version(), 64);
981
QVERIFY(version.hasValue(QOrganizerItemVersion::FieldVersion));
982
QVERIFY(!version.hasValue(QOrganizerItemVersion::FieldExtendedVersion));
984
QByteArray extendedVersion("Qt rules!");
985
version.setExtendedVersion(extendedVersion);
986
QCOMPARE(version.extendedVersion(), extendedVersion);
987
QVERIFY(version.hasValue(QOrganizerItemVersion::FieldVersion));
988
QVERIFY(version.hasValue(QOrganizerItemVersion::FieldExtendedVersion));
991
QTEST_MAIN(tst_QOrganizerItemDetails)
992
#include "tst_qorganizeritemdetails.moc"