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
****************************************************************************/
41
#include <QtTest/QtTest>
44
#include "qorganizer.h"
45
#include "qorganizeritemengineid.h"
47
//TESTED_COMPONENT=src/organizer
49
QTORGANIZER_USE_NAMESPACE
51
Q_DECLARE_METATYPE(QOrganizerItem)
52
Q_DECLARE_METATYPE(QOrganizerItemFilter)
53
Q_DECLARE_METATYPE(QOrganizerItemDetailFieldFilter)
55
class tst_QOrganizerItemFilter : public QObject
60
tst_QOrganizerItemFilter();
61
virtual ~tst_QOrganizerItemFilter();
67
void classHierarchy();
68
void intersectionFilter();
71
void detailFieldFilter();
72
void detailRangeFilter();
75
void collectionFilter();
76
void canonicalizedFilter();
77
void canonicalizedFilter_data();
79
void testFilter_data();
82
void datastream_data();
85
void sortObject(); // should perhaps be in a different test :)
87
void testDebugStreamOut();
88
void testDebugStreamOut_data();
91
class BasicItemLocalId : public QOrganizerItemEngineId
94
BasicItemLocalId(uint id) : m_id(id) {}
95
bool isEqualTo(const QOrganizerItemEngineId* other) const {
96
return m_id == static_cast<const BasicItemLocalId*>(other)->m_id;
98
bool isLessThan(const QOrganizerItemEngineId* other) const {
99
return m_id < static_cast<const BasicItemLocalId*>(other)->m_id;
101
QOrganizerItemEngineId* clone() const {
102
BasicItemLocalId* cloned = new BasicItemLocalId(m_id);
105
QString managerUri() const {
106
static const QString uri(QStringLiteral("qtorganizer:basicItem:"));
109
QDebug& debugStreamOut(QDebug& dbg) const {
112
QString toString() const {
113
return QString::number(m_id);
123
class BasicCollectionLocalId : public QOrganizerCollectionEngineId
126
BasicCollectionLocalId(uint id) : m_id(id) {}
127
bool isEqualTo(const QOrganizerCollectionEngineId* other) const {
128
return m_id == static_cast<const BasicCollectionLocalId*>(other)->m_id;
130
bool isLessThan(const QOrganizerCollectionEngineId* other) const {
131
return m_id < static_cast<const BasicCollectionLocalId*>(other)->m_id;
133
QOrganizerCollectionEngineId* clone() const {
134
BasicCollectionLocalId* cloned = new BasicCollectionLocalId(m_id);
137
QString managerUri() const {
138
static const QString uri(QStringLiteral("qtorganizer:basicCollection:"));
141
QDebug& debugStreamOut(QDebug& dbg) const {
144
QString toString() const {
145
return QString::number(m_id);
155
QOrganizerItemId makeId(uint id)
157
return QOrganizerItemId(new BasicItemLocalId(id));
160
QOrganizerCollectionId makeCId(uint id)
162
return QOrganizerCollectionId(new BasicCollectionLocalId(id));
165
tst_QOrganizerItemFilter::tst_QOrganizerItemFilter()
169
tst_QOrganizerItemFilter::~tst_QOrganizerItemFilter()
173
void tst_QOrganizerItemFilter::init()
177
void tst_QOrganizerItemFilter::cleanup()
181
void tst_QOrganizerItemFilter::classHierarchy()
183
/* Test "casting" up and down the hierarchy */
184
QOrganizerItemDetailFieldFilter df;
185
QVERIFY(df.type() == QOrganizerItemFilter::DetailFieldFilter);
186
df.setDetail(QOrganizerItemDetail::TypeUndefined, 101);
189
QOrganizerItemFilter f = df;
190
QVERIFY(f.type() == QOrganizerItemFilter::DetailFieldFilter);
192
QOrganizerItemDetailFieldFilter df2 = f;
193
QVERIFY(df2.type() == QOrganizerItemFilter::DetailFieldFilter);
194
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeUndefined);
195
QVERIFY(df2.detailField() == -1);
196
QVERIFY(df2.value() == 42);
198
/* Now try to check if we dangle pointers at all */
200
QOrganizerItemFilter f2 = df2;
202
QVERIFY(df2.type() == QOrganizerItemFilter::DetailFieldFilter);
203
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeUndefined);
204
QVERIFY(df2.detailField() == -1);
205
QVERIFY(df2.value() == 42);
208
QOrganizerItemDetailFieldFilter sdf2 = df2;
209
sdf2.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
210
QVERIFY(sdf2.detailType() == QOrganizerItemDetail::TypeComment);
211
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeUndefined);
213
QVERIFY(df2.type() == QOrganizerItemFilter::DetailFieldFilter);
214
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeUndefined);
215
QVERIFY(df2.detailField() == -1);
216
QVERIFY(df2.value() == 42);
218
/* Try creating a default filter and making sure we don't break */
219
QOrganizerItemFilter deff, deff2;
221
QVERIFY(deff.type() == QOrganizerItemFilter::DefaultFilter);
222
QVERIFY(deff == deff);
223
QVERIFY(deff == deff2);
224
QVERIFY(deff != df2);
225
QVERIFY(df2 != deff);
227
QOrganizerItemFilter fdeff = deff;
228
QVERIFY(fdeff.type() == QOrganizerItemFilter::DefaultFilter);
229
QVERIFY(fdeff == deff);
230
QVERIFY(fdeff == deff2);
232
/* Now some "invalid" filters */
233
QOrganizerItemInvalidFilter iff, iff2;
235
QVERIFY(iff.type() == QOrganizerItemFilter::InvalidFilter);
237
QVERIFY(iff == iff2);
241
QOrganizerItemFilter fiff = iff;
242
QVERIFY(fiff.type() == QOrganizerItemFilter::InvalidFilter);
243
QVERIFY(fiff == iff);
244
QVERIFY(fiff == iff2);
246
/* Now test some "cross casting" */
250
void tst_QOrganizerItemFilter::intersectionFilter()
252
/* Test boolean ops */
253
QOrganizerItemDetailFieldFilter df;
254
df.setDetail(QOrganizerItemDetail::TypeUndefined, -1);
256
QOrganizerItemDetailFieldFilter df2;
257
df2.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
259
QOrganizerItemDetailFieldFilter df3;
260
df3.setDetail(QOrganizerItemDetail::TypeDescription, QOrganizerItemDescription::FieldDescription);
262
QOrganizerItemIntersectionFilter bf;
265
QOrganizerItemFilter f = df & df2;
269
QOrganizerItemFilter f2 = bf & df3;
270
QVERIFY(f2.type() == QOrganizerItemFilter::IntersectionFilter);
271
QOrganizerItemIntersectionFilter bf2 = f2;
273
QCOMPARE(bf2.filters().count(), 2);
274
QVERIFY(bf2.filters().at(0) == bf);
275
QVERIFY(bf2.filters().at(1) == df3);
278
QVERIFY(f2.type() == QOrganizerItemFilter::IntersectionFilter);
281
QCOMPARE(bf2.filters().count(), 2);
282
QVERIFY(bf2.filters().at(0) == df3);
283
QVERIFY(bf2.filters().at(1) == bf);
286
QList<QOrganizerItemFilter> filterList = bf2.filters();
289
QVERIFY(f2.type() == QOrganizerItemFilter::IntersectionFilter);
292
QCOMPARE(bf2.filters().count(), 2);
293
QVERIFY(bf2.filters().at(0) == (df & df2));
294
QVERIFY(bf2.filters().at(1) == df3);
296
/* Self assignment should do nothing */
300
/* Test set filter */
301
bf2.setFilters(filterList);
302
QCOMPARE(bf2.filters().count(), 2);
303
QVERIFY(bf2.filters().at(0) == df3);
304
QVERIFY(bf2.filters().at(1) == bf);
308
QCOMPARE(bf2.filters().count(), 1);
309
QVERIFY(bf2.filters().at(0) == df3);
311
/* Double remove, should do nothing */
313
QCOMPARE(bf2.filters().count(), 1);
314
QVERIFY(bf2.filters().at(0) == df3);
317
QOrganizerItemIntersectionFilter bf3;
319
QVERIFY(bf3.filters().count() == 1);
321
QVERIFY(bf3.filters().count() == 2);
322
QVERIFY(bf3.filters().at(0) == df2);
323
QVERIFY(bf3.filters().at(1) == df);
325
QVERIFY(bf3.filters().count() == 3);
326
QVERIFY(bf3.filters().at(0) == df2);
327
QVERIFY(bf3.filters().at(1) == df);
328
QVERIFY(bf3.filters().at(2) == df3);
330
QVERIFY(bf3.filters().count() == 4);
331
QVERIFY(bf3.filters().at(0) == df3);
332
QVERIFY(bf3.filters().at(1) == df2);
333
QVERIFY(bf3.filters().at(2) == df);
334
QVERIFY(bf3.filters().at(3) == df3);
338
QVERIFY(bf3.filters().isEmpty());
341
void tst_QOrganizerItemFilter::unionFilter()
343
/* Test boolean ops */
344
QOrganizerItemDetailFieldFilter df;
345
df.setDetail(QOrganizerItemDetail::TypeUndefined, -1);
347
QOrganizerItemDetailFieldFilter df2;
348
df2.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
350
QOrganizerItemDetailFieldFilter df3;
351
df3.setDetail(QOrganizerItemDetail::TypeDescription, QOrganizerItemDescription::FieldDescription);
353
QOrganizerItemUnionFilter bf;
356
QOrganizerItemFilter f = df | df2;
360
QOrganizerItemFilter f2 = bf | df3;
361
QVERIFY(f2.type() == QOrganizerItemFilter::UnionFilter);
362
QOrganizerItemUnionFilter bf2 = f2;
364
QCOMPARE(bf2.filters().count(), 3);
365
QVERIFY(bf2.filters().at(0) == df);
366
QVERIFY(bf2.filters().at(1) == df2);
367
QVERIFY(bf2.filters().at(2) == df3);
370
QVERIFY(f2.type() == QOrganizerItemFilter::UnionFilter);
373
QCOMPARE(bf2.filters().count(), 3);
374
QVERIFY(bf2.filters().at(0) == df3);
375
QVERIFY(bf2.filters().at(1) == df);
376
QVERIFY(bf2.filters().at(2) == df2);
379
QList<QOrganizerItemFilter> filterList = bf2.filters();
382
QVERIFY(f2.type() == QOrganizerItemFilter::UnionFilter);
385
QCOMPARE(bf2.filters().count(), 3);
386
QVERIFY(bf2.filters().at(0) == df);
387
QVERIFY(bf2.filters().at(1) == df2);
388
QVERIFY(bf2.filters().at(2) == df3);
390
/* Self assignment should do nothing */
394
/* Test set filter */
395
bf2.setFilters(filterList);
396
QCOMPARE(bf2.filters().count(), 3);
397
QVERIFY(bf2.filters().at(0) == df3);
398
QVERIFY(bf2.filters().at(1) == df);
399
QVERIFY(bf2.filters().at(2) == df2);
403
QCOMPARE(bf2.filters().count(), 2);
404
QVERIFY(bf2.filters().at(0) == df3);
405
QVERIFY(bf2.filters().at(1) == df2);
407
/* Double remove, should do nothing */
409
QCOMPARE(bf2.filters().count(), 2);
410
QVERIFY(bf2.filters().at(0) == df3);
411
QVERIFY(bf2.filters().at(1) == df2);
414
QOrganizerItemUnionFilter bf3;
416
QVERIFY(bf3.filters().count() == 1);
418
QVERIFY(bf3.filters().count() == 2);
419
QVERIFY(bf3.filters().at(0) == df2);
420
QVERIFY(bf3.filters().at(1) == df);
422
QVERIFY(bf3.filters().count() == 3);
423
QVERIFY(bf3.filters().at(0) == df2);
424
QVERIFY(bf3.filters().at(1) == df);
425
QVERIFY(bf3.filters().at(2) == df3);
427
QVERIFY(bf3.filters().count() == 4);
428
QVERIFY(bf3.filters().at(0) == df3);
429
QVERIFY(bf3.filters().at(1) == df2);
430
QVERIFY(bf3.filters().at(2) == df);
431
QVERIFY(bf3.filters().at(3) == df3);
435
QVERIFY(bf3.filters().isEmpty());
438
void tst_QOrganizerItemFilter::detailFilter()
440
QOrganizerItemDetailFilter df;
442
QVERIFY(df.type() == QOrganizerItemFilter::DetailFilter);
444
QVERIFY(df.detail().type() == QOrganizerItemDetail::TypeUndefined);
445
QVERIFY(df.detail().isEmpty());
447
QOrganizerItemComment comment;
448
df.setDetail(comment);
449
QVERIFY(df.detail().isEmpty());
450
QVERIFY(df.detail().type() == QOrganizerItemDetail::TypeComment);
451
QVERIFY(!df.detail().values().keys().contains(QOrganizerItemComment::FieldComment));
452
QVERIFY(df.detail().value(QOrganizerItemComment::FieldComment).isNull());
454
comment.setComment(QStringLiteral("TestComment"));
455
df.setDetail(comment);
456
QVERIFY(!df.detail().isEmpty());
457
QCOMPARE(df.detail().type(), QOrganizerItemDetail::TypeComment);
458
QVERIFY(df.detail().values().keys().contains(QOrganizerItemComment::FieldComment));
459
QCOMPARE(df.detail().value(QOrganizerItemComment::FieldComment).toString(), QString(QStringLiteral("TestComment")));
463
QOrganizerItemFilter f = df;
466
QOrganizerItemDetailFilter df2 = f;
468
QCOMPARE(df2.detail(), df.detail());
470
/* Self assignment should do nothing */
474
/* Some cross casting */
475
QOrganizerItemDetailRangeFilter rf;
479
QCOMPARE(df2.type(), QOrganizerItemFilter::DetailFilter);
480
QCOMPARE(df2.detail().type(), QOrganizerItemDetail::TypeUndefined);
481
QVERIFY(df2.detail().isEmpty());
485
QCOMPARE(df2.detail().type(), QOrganizerItemDetail::TypeComment);
486
QVERIFY(df2.detail().values().keys().contains(QOrganizerItemComment::FieldComment));
488
/* Through base class */
491
QCOMPARE(df2.detail().type(), QOrganizerItemDetail::TypeUndefined);
492
QVERIFY(df2.detail().isEmpty());
494
/* Now test copy ctor */
495
QOrganizerItemDetailFilter df3(rf);
496
QVERIFY(df3.type() == QOrganizerItemFilter::DetailFilter);
497
QCOMPARE(df3.detail().type(), QOrganizerItemDetail::TypeUndefined);
498
QVERIFY(df3.detail().isEmpty());
502
QCOMPARE(df3.detail().type(), QOrganizerItemDetail::TypeComment);
503
QVERIFY(df3.detail().values().keys().contains(QOrganizerItemComment::FieldComment));
505
/* Now test copy ctor through base class */
506
QOrganizerItemDetailFilter df4(f);
507
QCOMPARE(df4.type(), QOrganizerItemFilter::DetailFilter);
508
QCOMPARE(df4.detail().type(), QOrganizerItemDetail::TypeUndefined);
509
QVERIFY(df4.detail().isEmpty());
513
QCOMPARE(df4.detail().type(), QOrganizerItemDetail::TypeComment);
514
QVERIFY(df4.detail().values().keys().contains(QOrganizerItemComment::FieldComment));
517
void tst_QOrganizerItemFilter::detailFieldFilter()
519
QOrganizerItemDetailFieldFilter df;
521
QVERIFY(df.type() == QOrganizerItemFilter::DetailFieldFilter);
523
QVERIFY(df.detailType() == QOrganizerItemDetail::TypeUndefined);
524
QVERIFY(df.detailField() == -1);
525
QVERIFY(df.matchFlags() == 0);
526
QVERIFY(df.value().isNull());
528
df.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
529
QVERIFY(df.detailType() == QOrganizerItemDetail::TypeComment);
530
QVERIFY(df.detailField() == QOrganizerItemComment::FieldComment);
531
QVERIFY(df.matchFlags() == 0);
532
QVERIFY(df.value().isNull());
534
df.setDetail(QOrganizerItemDetail::TypeDescription, QOrganizerItemDescription::FieldDescription);
535
QVERIFY(df.detailType() == QOrganizerItemDetail::TypeDescription);
536
QVERIFY(df.detailField() == QOrganizerItemDescription::FieldDescription);
537
QVERIFY(df.matchFlags() == 0);
538
QVERIFY(df.value().isNull());
540
df.setMatchFlags(QOrganizerItemFilter::MatchExactly);
541
QVERIFY(df.matchFlags() == QOrganizerItemFilter::MatchExactly);
544
QVERIFY(df.value() == 5);
546
df.setValue("String value");
547
QVERIFY(df.value() == "String value");
550
QOrganizerItemFilter f = df;
553
QOrganizerItemDetailFieldFilter df2 = f;
555
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeDescription);
556
QVERIFY(df2.detailField() == QOrganizerItemDescription::FieldDescription);
558
/* Self assignment should do nothing */
562
/* Some cross casting */
563
QOrganizerItemDetailRangeFilter rf;
567
QVERIFY(df2.type() == QOrganizerItemFilter::DetailFieldFilter);
568
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeUndefined);
569
QVERIFY(df2.detailField() == -1);
570
QVERIFY(df2.value().isNull());
574
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeDescription);
575
QVERIFY(df2.detailField() == QOrganizerItemDescription::FieldDescription);
577
/* Through base class */
580
QVERIFY(df2.detailType() == QOrganizerItemDetail::TypeUndefined);
581
QVERIFY(df2.detailField() == -1);
582
QVERIFY(df2.value().isNull());
584
/* Now test copy ctor */
585
QOrganizerItemDetailFieldFilter df3(rf);
586
QVERIFY(df3.type() == QOrganizerItemFilter::DetailFieldFilter);
587
QVERIFY(df3.detailType() == QOrganizerItemDetail::TypeUndefined);
588
QVERIFY(df3.detailField() == -1);
589
QVERIFY(df3.value().isNull());
593
QVERIFY(df3.detailType() == QOrganizerItemDetail::TypeDescription);
594
QVERIFY(df3.detailField() == QOrganizerItemDescription::FieldDescription);
596
/* Now test copy ctor through base class */
597
QOrganizerItemDetailFieldFilter df4(f);
598
QVERIFY(df4.type() == QOrganizerItemFilter::DetailFieldFilter);
599
QVERIFY(df4.detailType() == QOrganizerItemDetail::TypeUndefined);
600
QVERIFY(df4.detailField() == -1);
601
QVERIFY(df4.value().isNull());
605
QVERIFY(df4.detailType() == QOrganizerItemDetail::TypeDescription);
606
QVERIFY(df4.detailField() == QOrganizerItemDescription::FieldDescription);
609
void tst_QOrganizerItemFilter::detailRangeFilter()
611
QOrganizerItemDetailRangeFilter rf;
613
QVERIFY(rf.type() == QOrganizerItemFilter::DetailRangeFilter);
615
QVERIFY(rf.detailType() == QOrganizerItemDetail::TypeUndefined);
616
QVERIFY(rf.detailField() == -1);
617
QVERIFY(rf.matchFlags() == 0);
619
QVERIFY(rf.minValue().isNull());
620
QVERIFY(rf.maxValue().isNull());
621
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
623
rf.setDetail(QOrganizerItemDetail::TypeEventTime, QOrganizerEventTime::FieldStartDateTime);
624
QVERIFY(rf.detailType() == QOrganizerItemDetail::TypeEventTime);
625
QVERIFY(rf.detailField() == QOrganizerEventTime::FieldStartDateTime);
626
QVERIFY(rf.matchFlags() == 0);
628
QVERIFY(rf.minValue().isNull());
629
QVERIFY(rf.maxValue().isNull());
630
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
632
rf.setDetail(QOrganizerItemDetail::TypeEventTime, QOrganizerEventTime::FieldStartDateTime);
633
QVERIFY(rf.detailType() == QOrganizerItemDetail::TypeEventTime);
634
QVERIFY(rf.detailField() == QOrganizerEventTime::FieldStartDateTime);
635
QVERIFY(rf.matchFlags() == 0);
637
QVERIFY(rf.minValue().isNull());
638
QVERIFY(rf.maxValue().isNull());
639
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
641
rf.setMatchFlags(QOrganizerItemFilter::MatchExactly);
642
QVERIFY(rf.matchFlags() == QOrganizerItemFilter::MatchExactly);
644
rf.setMatchFlags(QOrganizerItemFilter::MatchCaseSensitive);
645
QVERIFY(rf.matchFlags() == QOrganizerItemFilter::MatchCaseSensitive);
647
// Contains is not allowed
648
rf.setMatchFlags(QOrganizerItemFilter::MatchCaseSensitive | QOrganizerItemFilter::MatchContains);
649
QVERIFY(rf.matchFlags() == QOrganizerItemFilter::MatchCaseSensitive);
651
rf.setMatchFlags(QOrganizerItemFilter::MatchEndsWith);
652
QVERIFY(rf.matchFlags() == QOrganizerItemFilter::MatchExactly); // 0
655
QVERIFY(rf.minValue() == 5);
656
QVERIFY(rf.maxValue() == 10);
657
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
659
rf.setRange(QVariant(), 11);
660
QVERIFY(rf.minValue().isNull());
661
QVERIFY(rf.maxValue() == 11);
662
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
664
rf.setRange(6, QVariant());
665
QVERIFY(rf.minValue() == 6);
666
QVERIFY(rf.maxValue().isNull());
667
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
669
rf.setRange(QVariant(), QVariant());
670
QVERIFY(rf.minValue().isNull());
671
QVERIFY(rf.maxValue().isNull());
672
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
674
rf.setRange(5, 10, QOrganizerItemDetailRangeFilter::ExcludeLower);
675
QVERIFY(rf.minValue() == 5);
676
QVERIFY(rf.maxValue() == 10);
677
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::ExcludeLower));
679
rf.setRange(QVariant(), 11, QOrganizerItemDetailRangeFilter::IncludeUpper);
680
QVERIFY(rf.minValue().isNull());
681
QVERIFY(rf.maxValue() == 11);
682
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::IncludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
684
rf.setRange(6, QVariant(), QOrganizerItemDetailRangeFilter::ExcludeLower | QOrganizerItemDetailRangeFilter::IncludeUpper);
685
QVERIFY(rf.minValue() == 6);
686
QVERIFY(rf.maxValue().isNull());
687
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::IncludeUpper | QOrganizerItemDetailRangeFilter::ExcludeLower));
689
rf.setRange(QVariant(), QVariant(), QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower);
690
QVERIFY(rf.minValue().isNull());
691
QVERIFY(rf.maxValue().isNull());
692
QVERIFY(rf.rangeFlags() == (QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower));
695
QOrganizerItemFilter f = rf;
698
QOrganizerItemDetailRangeFilter rf2 = f;
704
/* Self assignment should do nothing */
710
void tst_QOrganizerItemFilter::sortObject()
712
QOrganizerItemSortOrder sortorder;
715
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
716
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
717
QVERIFY(sortorder.detailField() == -1);
718
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
719
QVERIFY(sortorder.caseSensitivity() == Qt::CaseSensitive);
720
QVERIFY(!sortorder.isValid());
721
QVERIFY(sortorder == QOrganizerItemSortOrder());
724
sortorder.setBlankPolicy(QOrganizerItemSortOrder::BlanksFirst);
725
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksFirst);
726
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
727
QVERIFY(sortorder.detailField() == -1);
728
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
729
QVERIFY(sortorder.caseSensitivity() == Qt::CaseSensitive);
730
QVERIFY(!sortorder.isValid());
731
QVERIFY(sortorder != QOrganizerItemSortOrder());
733
sortorder.setBlankPolicy(QOrganizerItemSortOrder::BlanksLast);
734
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
735
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
736
QVERIFY(sortorder.detailField() == -1);
737
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
738
QVERIFY(sortorder.caseSensitivity() == Qt::CaseSensitive);
739
QVERIFY(!sortorder.isValid());
740
QVERIFY(sortorder == QOrganizerItemSortOrder());
743
sortorder.setDirection(Qt::DescendingOrder);
744
QVERIFY(sortorder.direction() == Qt::DescendingOrder);
745
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
746
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
747
QVERIFY(sortorder.detailField() == -1);
748
QVERIFY(sortorder.caseSensitivity() == Qt::CaseSensitive);
749
QVERIFY(!sortorder.isValid());
750
QVERIFY(sortorder != QOrganizerItemSortOrder());
752
sortorder.setDirection(Qt::AscendingOrder);
753
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
754
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
755
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
756
QVERIFY(sortorder.detailField() == -1);
757
QVERIFY(sortorder.caseSensitivity() == Qt::CaseSensitive);
758
QVERIFY(!sortorder.isValid());
759
QVERIFY(sortorder == QOrganizerItemSortOrder());
761
/* Case sensitivity */
762
sortorder.setCaseSensitivity(Qt::CaseInsensitive);
763
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
764
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
765
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
766
QVERIFY(sortorder.detailField() == -1);
767
QVERIFY(sortorder.caseSensitivity() == Qt::CaseInsensitive);
768
QVERIFY(!sortorder.isValid());
769
QVERIFY(sortorder != QOrganizerItemSortOrder());
771
sortorder.setCaseSensitivity(Qt::CaseSensitive);
772
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
773
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
774
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
775
QVERIFY(sortorder.detailField() == -1);
776
QVERIFY(sortorder.caseSensitivity() == Qt::CaseSensitive);
777
QVERIFY(!sortorder.isValid());
778
QVERIFY(sortorder == QOrganizerItemSortOrder());
781
sortorder.setDetail(QOrganizerItemDetail::TypeUndefined, -1);
782
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
783
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
784
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
785
QVERIFY(sortorder.detailField() == -1);
786
QVERIFY(!sortorder.isValid());
788
sortorder.setDetail(QOrganizerItemDetail::TypeComment, -1);
789
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
790
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
791
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
792
QVERIFY(sortorder.detailField() == -1);
793
QVERIFY(!sortorder.isValid());
794
QVERIFY(sortorder == QOrganizerItemSortOrder());
796
sortorder.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
797
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
798
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
799
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeComment);
800
QVERIFY(sortorder.detailField() == QOrganizerItemComment::FieldComment);
801
QVERIFY(sortorder.isValid());
803
sortorder.setDetail(QOrganizerItemDetail::TypeUndefined, 101);
804
QVERIFY(sortorder.direction() == Qt::AscendingOrder);
805
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksLast);
806
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeUndefined);
807
QVERIFY(sortorder.detailField() == -1);
808
QVERIFY(!sortorder.isValid());
811
sortorder.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
812
sortorder.setBlankPolicy(QOrganizerItemSortOrder::BlanksFirst);
813
sortorder.setDirection(Qt::DescendingOrder);
814
QVERIFY(sortorder.direction() == Qt::DescendingOrder);
815
QVERIFY(sortorder.blankPolicy() == QOrganizerItemSortOrder::BlanksFirst);
816
QVERIFY(sortorder.detailType() == QOrganizerItemDetail::TypeComment);
817
QVERIFY(sortorder.detailField() == QOrganizerItemComment::FieldComment);
818
QVERIFY(sortorder.isValid());
820
QOrganizerItemSortOrder other(sortorder);
821
QVERIFY(other.direction() == Qt::DescendingOrder);
822
QVERIFY(other.blankPolicy() == QOrganizerItemSortOrder::BlanksFirst);
823
QVERIFY(other.detailType() == QOrganizerItemDetail::TypeComment);
824
QVERIFY(other.detailField() == QOrganizerItemComment::FieldComment);
825
QVERIFY(other.isValid());
826
QVERIFY(other == sortorder);
827
QVERIFY(!(other != sortorder));
829
other.setDetail(QOrganizerItemDetail::TypeDescription, QOrganizerItemDescription::FieldDescription);
830
QVERIFY(other != sortorder);
832
other.setDetail(QOrganizerItemDetail::TypeComment, 2);
833
QVERIFY(other != sortorder);
835
/* Assignment operator */
836
QOrganizerItemSortOrder another;
838
QVERIFY(another.direction() == Qt::DescendingOrder);
839
QVERIFY(another.blankPolicy() == QOrganizerItemSortOrder::BlanksFirst);
840
QVERIFY(another.detailType() == QOrganizerItemDetail::TypeComment);
841
QVERIFY(another.detailField() == 2);
842
QVERIFY(another.isValid());
843
QVERIFY(another == other);
844
QVERIFY(!(other != another));
846
/* Self assignment */
848
QVERIFY(another.direction() == Qt::DescendingOrder);
849
QVERIFY(another.blankPolicy() == QOrganizerItemSortOrder::BlanksFirst);
850
QVERIFY(another.detailType() == QOrganizerItemDetail::TypeComment);
851
QVERIFY(another.detailField() == 2);
852
QVERIFY(another.isValid());
853
QVERIFY(another == other);
854
QVERIFY(!(other != another));
857
void tst_QOrganizerItemFilter::boringFilters()
859
QOrganizerItemFilter all;
860
QVERIFY(all.type() == QOrganizerItemFilter::DefaultFilter);
862
QOrganizerItemInvalidFilter invalid;
863
QVERIFY(invalid.type() == QOrganizerItemFilter::InvalidFilter);
865
QVERIFY(all != invalid);
866
QVERIFY(!(all == invalid));
869
QOrganizerItemFilter f = all;
872
QOrganizerItemFilter f2;
876
/* Self assignment should do nothing */
880
/* InvalidFilter, op= */
881
QOrganizerItemInvalidFilter inv2 = invalid;
882
QVERIFY(inv2 == invalid);
884
QOrganizerItemInvalidFilter inv3;
886
QVERIFY(inv3 == invalid);
889
QVERIFY(inv3 == invalid);
892
QVERIFY(inv3 == invalid); // won't be all
895
void tst_QOrganizerItemFilter::idListFilter()
897
QOrganizerItemIdFilter idf;
899
QVERIFY(idf.type() == QOrganizerItemFilter::IdFilter);
901
QVERIFY(idf.ids().count() == 0);
903
QList<QOrganizerItemId> ids;
904
ids << makeId(5) << makeId(6) << makeId(17);
907
QVERIFY(idf.ids() == ids);
909
idf.setIds(QList<QOrganizerItemId>());
910
QVERIFY(idf.ids().count() == 0);
912
QOrganizerItemId singleId = makeId(12);
913
idf.insert(singleId);
914
QVERIFY(idf.ids().contains(singleId));
915
idf.remove(singleId);
916
QVERIFY(!idf.ids().contains(singleId));
917
QList<QOrganizerItemId> allIds = idf.ids();
918
idf.remove(singleId); // remove again
919
QVERIFY(idf.ids() == allIds);
921
QVERIFY(idf.ids().isEmpty());
926
QOrganizerItemFilter f = idf;
929
QOrganizerItemIdFilter idf2 = f;
930
QVERIFY(idf2 == idf);
931
QVERIFY(idf2.ids() == ids);
936
/* Self assignment should do nothing */
938
QVERIFY(idf2 == idf);
940
QOrganizerItemDetailFieldFilter dfil;
941
QOrganizerItemIdFilter idf3(dfil);
942
QVERIFY(idf3.type() == QOrganizerItemFilter::IdFilter); // should be a blank id list filter
943
QOrganizerItemIdFilter idf4(idf);
944
QVERIFY(idf4 == idf); // should be a copy of idf.
945
idf = dfil; // now assign.
946
QVERIFY(idf == idf3); // again, should be a blank id list filter.
948
idf.setIds(ids); // force a detach
951
void tst_QOrganizerItemFilter::collectionFilter()
953
QOrganizerItemCollectionFilter icf;
955
QVERIFY(icf.collectionIds().isEmpty());
957
QOrganizerCollectionId id1 = makeCId(5);
958
QOrganizerCollectionId id2 = makeCId(6);
959
QOrganizerCollectionId id3 = makeCId(7);
960
QOrganizerCollectionId id4 = makeCId(12);
961
QSet<QOrganizerCollectionId> ids;
962
ids << id1 << id2 << id3;
964
icf.setCollectionIds(ids);
965
QVERIFY(icf.collectionIds() == ids);
967
icf.setCollectionId(id4);
970
QVERIFY(icf.collectionIds() == ids);
972
QOrganizerItemCollectionFilter icf2;
974
QVERIFY(icf2.collectionIds() == ids);
976
QOrganizerItemFilter fil;
978
QVERIFY(fil.type() == QOrganizerItemFilter::CollectionFilter);
980
QOrganizerItemCollectionFilter icf3(fil);
981
QVERIFY(fil.type() == QOrganizerItemFilter::CollectionFilter);
982
QVERIFY(icf3.collectionIds() == ids);
985
void tst_QOrganizerItemFilter::canonicalizedFilter()
987
QFETCH(QOrganizerItemFilter, in);
988
QFETCH(QOrganizerItemFilter, expected);
990
QOrganizerItemFilter out = QOrganizerManagerEngine::canonicalizedFilter(in);
991
QCOMPARE(out, expected);
994
void tst_QOrganizerItemFilter::canonicalizedFilter_data()
996
QTest::addColumn<QOrganizerItemFilter>("in");
997
QTest::addColumn<QOrganizerItemFilter>("expected");
999
QOrganizerItemDetailFieldFilter detailFilter1;
1000
detailFilter1.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1001
detailFilter1.setValue("1");
1002
detailFilter1.setMatchFlags(QOrganizerItemFilter::MatchContains);
1003
QOrganizerItemDetailFieldFilter detailFilter2;
1004
detailFilter2.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1005
detailFilter2.setValue("2");
1006
detailFilter2.setMatchFlags(QOrganizerItemFilter::MatchContains);
1007
QOrganizerItemInvalidFilter invalidFilter;
1008
QOrganizerItemFilter defaultFilter;
1011
QTest::newRow("Normal detail filter")
1012
<< static_cast<QOrganizerItemFilter>(detailFilter1)
1013
<< static_cast<QOrganizerItemFilter>(detailFilter1);
1017
QOrganizerItemIntersectionFilter qcif;
1018
qcif << detailFilter1;
1019
qcif << detailFilter2;
1020
QTest::newRow("Normal intersection filter")
1021
<< static_cast<QOrganizerItemFilter>(qcif)
1022
<< static_cast<QOrganizerItemFilter>(qcif);
1026
QOrganizerItemUnionFilter qcuf;
1027
qcuf << detailFilter1;
1028
qcuf << detailFilter2;
1029
QTest::newRow("Normal intersection filter")
1030
<< static_cast<QOrganizerItemFilter>(qcuf)
1031
<< static_cast<QOrganizerItemFilter>(qcuf);
1035
QOrganizerItemIntersectionFilter qcif;
1036
QTest::newRow("Empty intersection")
1037
<< static_cast<QOrganizerItemFilter>(qcif)
1038
<< static_cast<QOrganizerItemFilter>(defaultFilter);
1042
QOrganizerItemUnionFilter qcuf;
1043
QTest::newRow("Empty union")
1044
<< static_cast<QOrganizerItemFilter>(qcuf)
1045
<< static_cast<QOrganizerItemFilter>(invalidFilter);
1049
QOrganizerItemIntersectionFilter qcif;
1050
qcif << detailFilter1;
1051
QTest::newRow("Single entry intersection filter")
1052
<< static_cast<QOrganizerItemFilter>(qcif)
1053
<< static_cast<QOrganizerItemFilter>(detailFilter1);
1057
QOrganizerItemUnionFilter qcuf;
1058
qcuf << detailFilter1;
1059
QTest::newRow("Single entry union filter")
1060
<< static_cast<QOrganizerItemFilter>(qcuf)
1061
<< static_cast<QOrganizerItemFilter>(detailFilter1);
1065
QOrganizerItemIntersectionFilter qcif;
1066
qcif << invalidFilter;
1067
qcif << detailFilter1;
1068
qcif << detailFilter2;
1069
QTest::newRow("Intersection with invalid")
1070
<< static_cast<QOrganizerItemFilter>(qcif)
1071
<< static_cast<QOrganizerItemFilter>(invalidFilter);
1075
QOrganizerItemIntersectionFilter qcif;
1076
qcif << defaultFilter;
1077
qcif << detailFilter1;
1078
qcif << detailFilter2;
1079
QOrganizerItemIntersectionFilter expected;
1080
expected << detailFilter1;
1081
expected << detailFilter2;
1082
QTest::newRow("Intersection with default")
1083
<< static_cast<QOrganizerItemFilter>(qcif)
1084
<< static_cast<QOrganizerItemFilter>(expected);
1088
QOrganizerItemUnionFilter qcuf;
1089
qcuf << invalidFilter;
1090
qcuf << detailFilter1;
1091
qcuf << detailFilter2;
1092
QOrganizerItemUnionFilter expected;
1093
expected << detailFilter1;
1094
expected << detailFilter2;
1095
QTest::newRow("Union with invalid")
1096
<< static_cast<QOrganizerItemFilter>(qcuf)
1097
<< static_cast<QOrganizerItemFilter>(expected);
1101
QOrganizerItemUnionFilter qcuf;
1102
qcuf << defaultFilter;
1103
qcuf << detailFilter1;
1104
qcuf << detailFilter2;
1105
QTest::newRow("Union with default")
1106
<< static_cast<QOrganizerItemFilter>(qcuf)
1107
<< static_cast<QOrganizerItemFilter>(defaultFilter);
1111
QOrganizerItemIdFilter qclif;
1112
QTest::newRow("Empty local id filter")
1113
<< static_cast<QOrganizerItemFilter>(qclif)
1114
<< static_cast<QOrganizerItemFilter>(invalidFilter);
1118
QOrganizerItemIdFilter qclif;
1119
qclif.setIds(QList<QOrganizerItemId>() << makeId(1) << makeId(2));
1120
QTest::newRow("Normal local id filter")
1121
<< static_cast<QOrganizerItemFilter>(qclif)
1122
<< static_cast<QOrganizerItemFilter>(qclif);
1126
QOrganizerItemDetailRangeFilter qcdrf;
1127
qcdrf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1128
QOrganizerItemDetailFieldFilter expected;
1129
expected.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1130
QTest::newRow("Null valued range filter")
1131
<< static_cast<QOrganizerItemFilter>(qcdrf)
1132
<< static_cast<QOrganizerItemFilter>(expected);
1136
QOrganizerItemDetailRangeFilter qcdrf;
1137
qcdrf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1138
qcdrf.setRange(QStringLiteral("a"), QStringLiteral("a"));
1139
qcdrf.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1140
QOrganizerItemDetailFieldFilter expected;
1141
expected.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1142
expected.setValue(QStringLiteral("a"));
1143
expected.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1144
QTest::newRow("Equal valued range filter")
1145
<< static_cast<QOrganizerItemFilter>(qcdrf)
1146
<< static_cast<QOrganizerItemFilter>(expected);
1150
QOrganizerItemDetailRangeFilter qcdrf;
1151
qcdrf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1152
qcdrf.setRange(QStringLiteral("a"), QStringLiteral("a"),
1153
QOrganizerItemDetailRangeFilter::ExcludeLower | QOrganizerItemDetailRangeFilter::ExcludeUpper);
1154
qcdrf.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1155
QTest::newRow("Equal valued range filter with excluded bounds")
1156
<< static_cast<QOrganizerItemFilter>(qcdrf)
1157
<< static_cast<QOrganizerItemFilter>(invalidFilter);
1161
QOrganizerItemDetailRangeFilter qcdrf;
1162
qcdrf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1163
qcdrf.setRange(QStringLiteral("a"), QStringLiteral("b"));
1164
qcdrf.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1165
QTest::newRow("Normal range filter")
1166
<< static_cast<QOrganizerItemFilter>(qcdrf)
1167
<< static_cast<QOrganizerItemFilter>(qcdrf);
1171
QOrganizerItemDetailRangeFilter qcdrf;
1172
qcdrf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1173
qcdrf.setRange(QVariant(QVariant::String), QVariant(QVariant::String)); // null bounds
1174
qcdrf.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1175
QOrganizerItemDetailFieldFilter qcdf;
1176
qcdf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1177
qcdf.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1178
qcdf.setValue(QVariant(QVariant::String));
1179
QTest::newRow("Null valued range filter")
1180
<< static_cast<QOrganizerItemFilter>(qcdrf)
1181
<< static_cast<QOrganizerItemFilter>(qcdf);
1185
QOrganizerItemDetailRangeFilter qcdrf;
1186
qcdrf.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1187
qcdrf.setRange(QVariant(QVariant::String), QStringLiteral("a")); // min is null
1188
qcdrf.setMatchFlags(QOrganizerItemFilter::MatchFixedString);
1189
QTest::newRow("One sided range filter")
1190
<< static_cast<QOrganizerItemFilter>(qcdrf)
1191
<< static_cast<QOrganizerItemFilter>(qcdrf);
1195
QOrganizerItemDetailRangeFilter qcdrf;
1196
QTest::newRow("Empty range filter")
1197
<< static_cast<QOrganizerItemFilter>(qcdrf)
1198
<< static_cast<QOrganizerItemFilter>(invalidFilter);
1202
QOrganizerItemDetailFieldFilter qcdf;
1203
QTest::newRow("Empty detail filter")
1204
<< static_cast<QOrganizerItemFilter>(qcdf)
1205
<< static_cast<QOrganizerItemFilter>(invalidFilter);
1209
void tst_QOrganizerItemFilter::testFilter()
1211
QFETCH(QOrganizerItem, item);
1212
QFETCH(QOrganizerItemDetailFieldFilter, filter);
1213
QFETCH(bool, expected);
1215
QCOMPARE(QOrganizerManagerEngine::testFilter(filter, item), expected);
1218
void tst_QOrganizerItemFilter::testFilter_data()
1220
QTest::addColumn<QOrganizerItem>("item");
1221
QTest::addColumn<QOrganizerItemDetailFieldFilter>("filter");
1222
QTest::addColumn<bool>("expected");
1224
// XXX TODO: other detail types (comment, description, ...)
1227
QOrganizerItem item;
1228
QOrganizerItemLocation name;
1229
name.setLabel("test location");
1230
item.saveDetail(&name);
1232
QOrganizerItemDetailFieldFilter filter;
1233
filter.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1234
filter.setMatchFlags(QOrganizerItemFilter::MatchContains);
1236
filter.setValue("test location");
1237
QTest::newRow("QOrganizerItemLocation::match location")
1242
filter.setValue("ocati");
1243
QTest::newRow("QOrganizerItemLocation::match substring")
1248
filter.setValue("foo");
1249
QTest::newRow("QOrganizerItemLocation::match negative")
1256
QOrganizerItem item;
1257
item.setDisplayLabel(QStringLiteral("foo"));
1259
QOrganizerItemDetailFieldFilter filter;
1260
filter.setDetail(QOrganizerItemDetail::TypeDisplayLabel, QOrganizerItemDisplayLabel::FieldLabel);
1261
filter.setMatchFlags(QOrganizerItemFilter::MatchContains);
1263
filter.setValue("foo");
1264
QTest::newRow("QOrganizerItemDisplayLabel::match positive")
1269
filter.setValue("o");
1270
QTest::newRow("QOrganizerItemDisplayLabel::match positive substring")
1275
filter.setValue("bar");
1276
QTest::newRow("QOrganizerItemDisplayLabel::match negative")
1283
QOrganizerItem item;
1284
QOrganizerItemPriority priority;
1285
priority.setPriority(QOrganizerItemPriority::VeryHighPriority);
1286
item.saveDetail(&priority);
1288
QOrganizerItemDetailFieldFilter filter;
1289
filter.setDetail(QOrganizerItemDetail::TypePriority, QOrganizerItemPriority::FieldPriority);
1290
filter.setMatchFlags(QOrganizerItemFilter::MatchContains);
1292
filter.setValue(QOrganizerItemPriority::VeryHighPriority);
1293
QTest::newRow("QOrganizerItemPriority::match positive")
1298
filter.setValue(QOrganizerItemPriority::VeryLowPriority);
1299
QTest::newRow("QOrganizerItemPhoneNumber::match negative")
1306
void tst_QOrganizerItemFilter::datastream()
1308
QFETCH(QOrganizerItemFilter, filterIn);
1311
QDataStream stream1(&buffer, QIODevice::WriteOnly);
1312
stream1 << filterIn;
1314
QVERIFY(buffer.size() > 0);
1316
QDataStream stream2(buffer);
1317
QOrganizerItemFilter filterOut;
1318
stream2 >> filterOut;
1319
QCOMPARE(filterOut, filterIn);
1322
void tst_QOrganizerItemFilter::datastream_data()
1324
QTest::addColumn<QOrganizerItemFilter>("filterIn");
1327
QOrganizerItemFilter filter;
1328
QTest::newRow("default") << filter;
1332
QOrganizerItemDetailFieldFilter filter;
1333
filter.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
1334
filter.setMatchFlags(QOrganizerItemFilter::MatchEndsWith);
1335
filter.setValue("ski");
1336
QTest::newRow("detail") << (QOrganizerItemFilter)filter;
1340
QOrganizerItemIntersectionFilter filter;
1341
QTest::newRow("intersection") << (QOrganizerItemFilter)filter;
1345
QOrganizerItemInvalidFilter filter;
1346
QTest::newRow("invalid") << (QOrganizerItemFilter)filter;
1350
QOrganizerItemUnionFilter filter;
1351
QTest::newRow("union") << (QOrganizerItemFilter)filter;
1354
// NOTE: LocalIdFilter streaming is not supported
1357
void tst_QOrganizerItemFilter::traits()
1359
QCOMPARE(sizeof(QOrganizerItemFilter), sizeof(void *));
1360
QTypeInfo<QOrganizerItemFilter> ti;
1361
QVERIFY(ti.isComplex);
1362
QVERIFY(!ti.isStatic);
1363
QVERIFY(!ti.isLarge);
1364
QVERIFY(!ti.isPointer);
1365
QVERIFY(!ti.isDummy);
1368
void tst_QOrganizerItemFilter::sortTraits()
1370
QCOMPARE(sizeof(QOrganizerItemSortOrder), sizeof(void *));
1371
QTypeInfo<QOrganizerItemSortOrder> ti;
1372
QVERIFY(ti.isComplex);
1373
QVERIFY(!ti.isStatic);
1374
QVERIFY(!ti.isLarge);
1375
QVERIFY(!ti.isPointer);
1376
QVERIFY(!ti.isDummy);
1379
void tst_QOrganizerItemFilter::testDebugStreamOut()
1381
QFETCH(QOrganizerItemFilter, filterIn);
1382
QFETCH(QString, messageExpected);
1384
QTest::ignoreMessage(QtDebugMsg, messageExpected.toUtf8());
1385
qDebug() << filterIn;
1387
QOrganizerItemSortOrder sortorder;
1388
QTest::ignoreMessage(QtDebugMsg, "QOrganizerItemSortOrder(detailType=0,detailField=-1,blankPolicy=1,direction=0,caseSensitivity=1)");
1389
qDebug() << sortorder;
1392
void tst_QOrganizerItemFilter::testDebugStreamOut_data()
1394
QTest::addColumn<QOrganizerItemFilter>("filterIn");
1395
QTest::addColumn<QString>("messageExpected");
1398
QOrganizerItemFilter filter;
1399
QTest::newRow("default") << filter << "QOrganizerItemFilter((null))";
1403
QOrganizerItemCollectionFilter filter;
1404
QOrganizerCollectionId id1 = makeCId(5);
1405
QOrganizerCollectionId id2 = makeCId(6);
1406
QOrganizerCollectionId id3 = makeCId(7);
1407
QOrganizerCollectionId id4 = makeCId(12);
1408
QSet<QOrganizerCollectionId> ids;
1409
ids << id1 << id2 << id3;
1410
filter.setCollectionIds(ids);
1411
// Testing method setCollectionIds
1412
// FIXME: QTBUG-25382: Assumes QSet is an ordered collection, which it's not
1413
// QTest::newRow("collection") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(5), QOrganizerCollectionId(6), QOrganizerCollectionId(7)) ))";
1415
filter.setCollectionId(id2);
1416
// Testing method setCollectionId (and the related clearing of the collection)
1417
QTest::newRow("collection") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(6)) ))";
1418
filter.setCollectionId(id4);
1419
// Testing again method setCollectionId (and the related clearing of the collection)
1420
QTest::newRow("collection") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(12)) ))";
1423
// Testing again method setCollectionIds
1424
QTest::newRow("collection") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(12)) ))";
1426
QOrganizerItemCollectionFilter filter2;
1428
// Testing again method setCollectionIds on the copied filter
1429
QTest::newRow("collection") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(12)) ))";
1431
QOrganizerItemFilter fil;
1433
// Testing that the assignment/conversion went fine
1434
QTest::newRow("collection") << (QOrganizerItemFilter)fil << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(12)) ))";
1436
QOrganizerItemCollectionFilter filter3(fil);
1437
QTest::newRow("collection") << (QOrganizerItemFilter)filter3 << "QOrganizerItemFilter(QOrganizerItemCollectionFilter(collectionIds=QSet(QOrganizerCollectionId(12)) ))";
1441
QOrganizerItemDetailFieldFilter filter;
1442
filter.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
1443
filter.setMatchFlags(QOrganizerItemFilter::MatchEndsWith);
1444
filter.setValue("ski");
1445
QTest::newRow("detail") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailFieldFilter(detailType=200,detailField=201,value=QVariant(QString, \"ski\") ,matchFlags=3))";
1449
QOrganizerItemDetailRangeFilter filter;
1450
// Testing the empty fields
1451
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=0,detailField=-1,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1453
// Testing the method setDetail
1454
filter.setDetail(QOrganizerItemDetail::TypeLocation, QOrganizerItemLocation::FieldLabel);
1455
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1457
// Testing the method rangeFlags
1458
filter.setMatchFlags(QOrganizerItemFilter::MatchExactly);
1459
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1461
// Testing the method matchFlags
1462
filter.setMatchFlags(QOrganizerItemFilter::MatchCaseSensitive);
1463
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=16,rangeFlags=0))";
1465
// Contains is not allowed
1466
filter.setMatchFlags(QOrganizerItemFilter::MatchCaseSensitive | QOrganizerItemFilter::MatchContains);
1467
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=16,rangeFlags=0))";
1468
filter.setMatchFlags(QOrganizerItemFilter::MatchEndsWith);
1469
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1471
// Testing the minValue and maxValue
1472
filter.setRange(5, 10);
1473
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(int, 5) ,maxValue=QVariant(int, 10) ,matchFlags=0,rangeFlags=0))";
1475
// Testing the setRange
1476
filter.setRange(QVariant(), 11);
1477
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(int, 11) ,matchFlags=0,rangeFlags=0))";
1479
filter.setRange(6, QVariant());
1480
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(int, 6) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1482
filter.setRange(QVariant(), QVariant());
1483
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1485
filter.setRange(5, 10, QOrganizerItemDetailRangeFilter::ExcludeLower);
1486
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(int, 5) ,maxValue=QVariant(int, 10) ,matchFlags=0,rangeFlags=2))"; // *
1488
filter.setRange(QVariant(), 11, QOrganizerItemDetailRangeFilter::IncludeUpper);
1489
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(int, 11) ,matchFlags=0,rangeFlags=1))";
1491
filter.setRange(6, QVariant(), QOrganizerItemDetailRangeFilter::ExcludeLower | QOrganizerItemDetailRangeFilter::IncludeUpper);
1492
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(int, 6) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=3))";
1494
filter.setRange(QVariant(), QVariant(), QOrganizerItemDetailRangeFilter::ExcludeUpper | QOrganizerItemDetailRangeFilter::IncludeLower);
1495
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1498
QOrganizerItemFilter f = filter;
1499
QTest::newRow("detailRange") << (QOrganizerItemFilter)f << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1501
QOrganizerItemDetailRangeFilter filter2 = f;
1502
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1505
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1507
// Self assignment should do nothing
1509
QTest::newRow("detailRange") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemDetailRangeFilter(detailType=700,detailField=703,minValue=QVariant(Invalid) ,maxValue=QVariant(Invalid) ,matchFlags=0,rangeFlags=0))";
1513
// Testing creation of an empty filter
1514
QOrganizerItemIdFilter filter;
1515
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1517
// Testing the method setIds
1518
QList<QOrganizerItemId> ids;
1519
ids << makeId(5) << makeId(6) << makeId(17);
1521
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1523
// Resetting the list of Ids
1524
filter.setIds(QList<QOrganizerItemId>());
1525
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1527
// Testing the method insert
1528
QOrganizerItemId singleId = makeId(12);
1529
filter.insert(singleId);
1530
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(12)) ))";
1532
// Testing the method remove
1533
filter.remove(singleId);
1534
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1536
QList<QOrganizerItemId> allIds = filter.ids();
1537
filter.remove(singleId); // remove again
1539
filter.setIds(allIds);
1540
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1544
QOrganizerItemFilter f = filter;
1545
QTest::newRow("Id") << (QOrganizerItemFilter)f << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1546
QOrganizerItemIdFilter filter2 = f;
1547
QTest::newRow("Id") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1549
QTest::newRow("Id") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1551
// Self assignment should do nothing
1553
QTest::newRow("Id") << (QOrganizerItemFilter)filter2 << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1555
QOrganizerItemDetailFieldFilter dfil;
1556
QOrganizerItemIdFilter filter3(dfil);
1557
QTest::newRow("Id") << (QOrganizerItemFilter)filter3 << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1559
QOrganizerItemIdFilter filter4(filter);
1560
QTest::newRow("Id") << (QOrganizerItemFilter)filter4 << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1561
filter = dfil; // now assign.
1562
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1563
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=() ))";
1565
filter.setIds(ids); // force a detach
1566
QTest::newRow("Id") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIdFilter(ids=(QOrganizerItemId(5), QOrganizerItemId(6), QOrganizerItemId(17)) ))";
1571
// Test empty filter
1572
QOrganizerItemIntersectionFilter filter;
1573
QTest::newRow("intersection") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIntersectionFilter(filters=() ))";
1576
QOrganizerItemDetailFieldFilter filter1;
1577
filter1.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
1579
QOrganizerItemDetailFieldFilter filter2;
1580
filter2.setDetail(QOrganizerItemDetail::TypeDescription, QOrganizerItemDescription::FieldDescription);
1582
QOrganizerItemDetailFieldFilter filter3;
1583
filter3.setDetail(QOrganizerItemDetail::TypeDisplayLabel, QOrganizerItemDisplayLabel::FieldLabel);
1585
filter << filter1 << filter2;
1586
QTest::newRow("intersection") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemIntersectionFilter(filters=(QOrganizerItemFilter(QOrganizerItemDetailFieldFilter(detailType=200,detailField=201,value=QVariant(Invalid) ,matchFlags=0)), QOrganizerItemFilter(QOrganizerItemDetailFieldFilter(detailType=300,detailField=301,value=QVariant(Invalid) ,matchFlags=0))) ))";
1590
QOrganizerItemInvalidFilter filter;
1591
QTest::newRow("invalid") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemInvalidFilter())";
1595
QOrganizerItemUnionFilter filter;
1596
QTest::newRow("union") << (QOrganizerItemFilter)filter << "QOrganizerItemFilter(QOrganizerItemUnionFilter(filters=() ))";
1599
QOrganizerItemDetailFieldFilter df;
1600
df.setDetail(QOrganizerItemDetail::TypeComment, QOrganizerItemComment::FieldComment);
1602
QOrganizerItemDetailFieldFilter df2;
1603
df2.setDetail(QOrganizerItemDetail::TypeDescription, QOrganizerItemDescription::FieldDescription);
1605
QOrganizerItemDetailFieldFilter df3;
1606
df3.setDetail(QOrganizerItemDetail::TypeDisplayLabel, QOrganizerItemDisplayLabel::FieldLabel);
1608
QOrganizerItemUnionFilter bf;
1610
QTest::newRow("union") << (QOrganizerItemFilter)bf << "QOrganizerItemFilter(QOrganizerItemUnionFilter(filters=(QOrganizerItemFilter(QOrganizerItemDetailFieldFilter(detailType=200,detailField=201,value=QVariant(Invalid) ,matchFlags=0)), QOrganizerItemFilter(QOrganizerItemDetailFieldFilter(detailType=300,detailField=301,value=QVariant(Invalid) ,matchFlags=0))) ))";
1616
QTEST_MAIN(tst_QOrganizerItemFilter)
1617
#include "tst_qorganizeritemfilter.moc"