1
/****************************************************************************
3
** Copyright (C) 2016 The Qt Company Ltd.
4
** Contact: https://www.qt.io/licensing/
6
** This file is part of the test suite of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
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 The Qt Company. For licensing terms
14
** and conditions see https://www.qt.io/terms-conditions. For further
15
** information use the contact form at https://www.qt.io/contact-us.
17
** GNU General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU
19
** General Public License version 3 as published by the Free Software
20
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21
** included in the packaging of this file. Please review the following
22
** information to ensure the GNU General Public License requirements will
23
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
27
****************************************************************************/
30
#include <QtTest/QtTest>
31
#include <qapplication.h>
32
#include <qgroupbox.h>
33
#include <qlineedit.h>
37
#include <qdatetimeedit.h>
40
#include <qeventloop.h>
43
#include <QStyleOptionSpinBox>
48
#include <QDateTimeEdit>
49
#include <QCalendarWidget>
55
#include <QVariantList>
57
#include <QApplication>
59
#include <QVBoxLayout>
64
#include <QStyleOptionComboBox>
68
#include <QWheelEvent>
71
#include <QTestEventList>
74
#include <private/qdatetimeedit_p.h>
83
Q_DECLARE_METATYPE(Qt::Key);
84
Q_DECLARE_METATYPE(Qt::KeyboardModifiers);
85
Q_DECLARE_METATYPE(Qt::KeyboardModifier);
87
#if defined(Q_OS_WINCE)
88
#ifndef SPI_GETPLATFORMTYPE
89
#define SPI_GETPLATFORMTYPE 257
92
bool qt_wince_is_platform(const QString &platformString) {
93
wchar_t tszPlatform[64];
94
if (SystemParametersInfo(SPI_GETPLATFORMTYPE,
95
sizeof(tszPlatform)/sizeof(*tszPlatform),tszPlatform,0))
96
if (0 == _tcsicmp(reinterpret_cast<const wchar_t *> (platformString.utf16()), tszPlatform))
100
bool qt_wince_is_pocket_pc() {
101
return qt_wince_is_platform(QString::fromLatin1("PocketPC"));
103
bool qt_wince_is_smartphone() {
104
return qt_wince_is_platform(QString::fromLatin1("Smartphone"));
106
bool qt_wince_is_mobile() {
107
return (qt_wince_is_smartphone() || qt_wince_is_pocket_pc());
111
class EditorDateEdit : public QDateTimeEdit
115
EditorDateEdit(QWidget *parent = 0) : QDateTimeEdit(parent) {}
116
QLineEdit *lineEdit() { return QDateTimeEdit::lineEdit(); }
117
friend class tst_QDateTimeEdit;
120
class tst_QDateTimeEdit : public QObject
128
void cleanupTestCase();
130
void cachedDayTest();
132
void constructor_qwidget();
133
void constructor_qdatetime_data();
134
void constructor_qdatetime();
135
void constructor_qdate_data();
136
void constructor_qdate();
137
void constructor_qtime_data();
138
void constructor_qtime();
140
void sectionText_data();
142
void dateTimeSignalChecking_data();
143
void dateTimeSignalChecking();
145
void stepHourAMPM_data();
148
void displayedSections_data();
149
void displayedSections();
150
void currentSection_data();
151
void currentSection();
153
void setCurrentSection();
154
void setCurrentSection_data();
156
void minimumDate_data();
158
void maximumDate_data();
160
void clearMinimumDate_data();
161
void clearMinimumDate();
162
void clearMaximumDate_data();
163
void clearMaximumDate();
165
void minimumDateTime_data();
166
void minimumDateTime();
167
void maximumDateTime_data();
168
void maximumDateTime();
170
void clearMinimumDateTime_data();
171
void clearMinimumDateTime();
172
void clearMaximumDateTime_data();
173
void clearMaximumDateTime();
175
void displayFormat_data();
176
void displayFormat();
178
void specialValueText();
179
void setRange_data();
182
void selectAndScrollWithKeys();
185
void tabKeyNavigation();
186
void tabKeyNavigationWithPrefix();
187
void tabKeyNavigationWithSuffix();
192
void wrappingDate_data();
195
void dateSignalChecking_data();
196
void dateSignalChecking();
198
void wrappingTime_data();
201
void userKeyPress_Time_data();
202
void userKeyPress_Time();
204
void timeSignalChecking_data();
205
void timeSignalChecking();
219
void calendarPopup();
228
void setSelectedSection();
232
#ifndef QT_NO_WHEELEVENT
236
void specialValueCornerCase();
237
void cursorPositionOnInit();
241
void nextPrevSection_data();
242
void nextPrevSection();
244
void dateEditTimeEditFormats();
245
void timeSpec_data();
250
void monthEdgeCase();
253
void potentialYYValueBug();
254
void textSectionAtEnd();
256
void keypadAutoAdvance_data();
257
void keypadAutoAdvance();
260
void focusNextPrevChild();
262
void taskQTBUG_12384_timeSpecShowTimeOnly();
264
void deleteCalendarWidget();
266
#ifdef QT_BUILD_INTERNAL
267
void dateEditCorrectSectionSize_data();
268
void dateEditCorrectSectionSize();
271
EditorDateEdit* testWidget;
272
QWidget *testFocusWidget;
275
typedef QList<QTime> TimeList;
276
typedef QList<Qt::Key> KeyList;
278
// Testing get/set functions
279
void tst_QDateTimeEdit::getSetCheck()
282
QCOMPARE(obj1.inputMethodQuery(Qt::ImHints), QVariant(int(Qt::ImhPreferNumbers)));
283
obj1.setDisplayFormat("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z AP");
284
// Section QDateTimeEdit::currentSection()
285
// void QDateTimeEdit::setCurrentSection(Section)
286
obj1.setCurrentSection(QDateTimeEdit::NoSection);
287
QVERIFY(obj1.currentSection() != QDateTimeEdit::NoSection);
288
obj1.setCurrentSection(QDateTimeEdit::AmPmSection);
289
QCOMPARE(QDateTimeEdit::AmPmSection, obj1.currentSection());
290
obj1.setCurrentSection(QDateTimeEdit::MSecSection);
291
QCOMPARE(QDateTimeEdit::MSecSection, obj1.currentSection());
292
obj1.setCurrentSection(QDateTimeEdit::SecondSection);
293
QCOMPARE(QDateTimeEdit::SecondSection, obj1.currentSection());
294
obj1.setCurrentSection(QDateTimeEdit::MinuteSection);
295
QCOMPARE(QDateTimeEdit::MinuteSection, obj1.currentSection());
296
obj1.setCurrentSection(QDateTimeEdit::HourSection);
297
QCOMPARE(QDateTimeEdit::HourSection, obj1.currentSection());
298
obj1.setCurrentSection(QDateTimeEdit::DaySection);
299
QCOMPARE(QDateTimeEdit::DaySection, obj1.currentSection());
300
obj1.setCurrentSection(QDateTimeEdit::MonthSection);
301
QCOMPARE(QDateTimeEdit::MonthSection, obj1.currentSection());
302
obj1.setCurrentSection(QDateTimeEdit::YearSection);
303
QCOMPARE(QDateTimeEdit::YearSection, obj1.currentSection());
306
QCOMPARE(dateEdit.inputMethodQuery(Qt::ImHints), QVariant(int(Qt::ImhPreferNumbers)));
308
QCOMPARE(timeEdit.inputMethodQuery(Qt::ImHints), QVariant(int(Qt::ImhPreferNumbers)));
311
void tst_QDateTimeEdit::initTestCase()
313
QLocale system = QLocale::system();
314
if (system.language() != QLocale::C && system.language() != QLocale::English)
315
qWarning("Running under locale %s/%s -- this test may generate failures due to language differences",
316
qPrintable(QLocale::languageToString(system.language())),
317
qPrintable(QLocale::countryToString(system.country())));
318
testWidget = new EditorDateEdit(0);
319
testFocusWidget = new QWidget(0);
320
testFocusWidget->resize(200, 100);
321
testFocusWidget->show();
324
void tst_QDateTimeEdit::cleanupTestCase()
326
delete testFocusWidget;
332
void tst_QDateTimeEdit::init()
334
QLocale::setDefault(QLocale(QLocale::C));
335
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
336
SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT));
338
testWidget->setDisplayFormat("dd/MM/yyyy"); // Nice default to have
339
testWidget->setDateTime(QDateTime(QDate(2000, 1, 1), QTime(0, 0)));
341
testFocusWidget->move(-1000, -1000);
344
void tst_QDateTimeEdit::cleanup()
346
testWidget->clearMinimumDateTime();
347
testWidget->clearMaximumDateTime();
348
testWidget->setTimeSpec(Qt::LocalTime);
349
testWidget->setSpecialValueText(QString());
350
testWidget->setWrapping(false);
353
void tst_QDateTimeEdit::constructor_qwidget()
356
QDateTimeEdit dte(0);
358
QCOMPARE(dte.dateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0)));
359
QCOMPARE(dte.minimumDate(), QDate(1752, 9, 14));
360
QCOMPARE(dte.minimumTime(), QTime(0, 0, 0, 0));
361
QCOMPARE(dte.maximumDate(), QDate(7999, 12, 31));
362
QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
365
void tst_QDateTimeEdit::constructor_qdatetime_data()
367
QTest::addColumn<QDateTime>("parameter");
368
QTest::addColumn<QDateTime>("displayDateTime");
369
QTest::addColumn<QDate>("minimumDate");
370
QTest::addColumn<QTime>("minimumTime");
371
QTest::addColumn<QDate>("maximumDate");
372
QTest::addColumn<QTime>("maximumTime");
374
QTest::newRow("normal") << QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764))
375
<< QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764))
376
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
377
<< QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
379
QTest::newRow("invalid") << QDateTime(QDate(9999, 99, 99), QTime(13, 46, 32, 764))
380
<< QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
381
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
382
<< QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
385
void tst_QDateTimeEdit::constructor_qdatetime()
387
QFETCH(QDateTime, parameter);
388
QFETCH(QDateTime, displayDateTime);
389
QFETCH(QDate, minimumDate);
390
QFETCH(QTime, minimumTime);
391
QFETCH(QDate, maximumDate);
392
QFETCH(QTime, maximumTime);
396
QDateTimeEdit dte(parameter);
398
QCOMPARE(dte.dateTime(), displayDateTime);
399
QCOMPARE(dte.minimumDate(), minimumDate);
400
QCOMPARE(dte.minimumTime(), minimumTime);
401
QCOMPARE(dte.maximumDate(), maximumDate);
402
QCOMPARE(dte.maximumTime(), maximumTime);
405
void tst_QDateTimeEdit::constructor_qdate_data()
407
QTest::addColumn<QDate>("parameter");
408
QTest::addColumn<QDateTime>("displayDateTime");
409
QTest::addColumn<QDate>("minimumDate");
410
QTest::addColumn<QTime>("minimumTime");
411
QTest::addColumn<QDate>("maximumDate");
412
QTest::addColumn<QTime>("maximumTime");
414
QTest::newRow("normal") << QDate(2004, 6, 16)
415
<< QDateTime(QDate(2004, 6, 16), QTime(0, 0, 0, 0))
416
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
417
<< QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
419
QTest::newRow("invalid") << QDate(9999, 99, 99)
420
<< QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
421
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
422
<< QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
425
void tst_QDateTimeEdit::constructor_qdate()
427
QFETCH(QDate, parameter);
428
QFETCH(QDateTime, displayDateTime);
429
QFETCH(QDate, minimumDate);
430
QFETCH(QTime, minimumTime);
431
QFETCH(QDate, maximumDate);
432
QFETCH(QTime, maximumTime);
436
QDateTimeEdit dte(parameter);
438
QCOMPARE(dte.dateTime(), displayDateTime);
439
QCOMPARE(dte.minimumDate(), minimumDate);
440
QCOMPARE(dte.minimumTime(), minimumTime);
441
QCOMPARE(dte.maximumDate(), maximumDate);
442
QCOMPARE(dte.maximumTime(), maximumTime);
445
void tst_QDateTimeEdit::constructor_qtime_data()
447
QTest::addColumn<QTime>("parameter");
448
QTest::addColumn<QDateTime>("displayDateTime");
449
QTest::addColumn<QDate>("minimumDate");
450
QTest::addColumn<QTime>("minimumTime");
451
QTest::addColumn<QDate>("maximumDate");
452
QTest::addColumn<QTime>("maximumTime");
454
QTest::newRow("normal") << QTime(13, 46, 32, 764)
455
<< QDateTime(QDate(2000, 1, 1), QTime(13, 46, 32, 764))
456
<< QDate(2000, 1, 1) << QTime(0, 0, 0, 0)
457
<< QDate(2000, 1, 1) << QTime(23, 59, 59, 999);
459
QTest::newRow("invalid") << QTime(99, 99, 99, 5000)
460
<< QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
461
<< QDate(2000, 1, 1) << QTime(0, 0, 0, 0)
462
<< QDate(2000, 1, 1) << QTime(23, 59, 59, 999);
465
void tst_QDateTimeEdit::constructor_qtime()
467
QFETCH(QTime, parameter);
468
QFETCH(QDateTime, displayDateTime);
469
QFETCH(QDate, minimumDate);
470
QFETCH(QTime, minimumTime);
471
QFETCH(QDate, maximumDate);
472
QFETCH(QTime, maximumTime);
476
QDateTimeEdit dte(parameter);
478
QCOMPARE(dte.dateTime(), displayDateTime);
479
QCOMPARE(dte.minimumDate(), minimumDate);
480
QCOMPARE(dte.minimumTime(), minimumTime);
481
QCOMPARE(dte.maximumDate(), maximumDate);
482
QCOMPARE(dte.maximumTime(), maximumTime);
485
void tst_QDateTimeEdit::minimumDate_data()
487
QTest::addColumn<QDate>("minimumDate");
488
QTest::addColumn<QDate>("expectedMinDate");
490
QTest::newRow("normal-0") << QDate(2004, 5, 10) << QDate(2004, 5, 10);
491
QTest::newRow("normal-1") << QDate(2002, 3, 15) << QDate(2002, 3, 15);
492
QTest::newRow("normal-2") << QDate(7999, 12, 31) << QDate(7999, 12, 31);
493
QTest::newRow("normal-3") << QDate(1753, 1, 1) << QDate(1753, 1, 1);
494
QTest::newRow("invalid-0") << QDate(0, 0, 0) << QDate(1752, 9, 14);
495
QTest::newRow("old") << QDate(1492, 8, 3) << QDate(1492, 8, 3);
498
void tst_QDateTimeEdit::minimumDate()
500
QFETCH(QDate, minimumDate);
501
QFETCH(QDate, expectedMinDate);
503
testWidget->setMinimumDate(minimumDate);
504
QCOMPARE(testWidget->minimumDate(), expectedMinDate);
507
void tst_QDateTimeEdit::minimumDateTime_data()
509
QTest::addColumn<QDateTime>("minimumDateTime");
510
QTest::addColumn<QDateTime>("expectedMinDateTime");
512
QTest::newRow("normal-0") << QDateTime(QDate(2004, 5, 10), QTime(2, 3, 14))
513
<< QDateTime(QDate(2004, 5, 10), QTime(2, 3, 14));
515
QTest::newRow("normal-1") << QDateTime(QDate(2005, 5, 10), QTime(22, 33, 1))
516
<< QDateTime(QDate(2005, 5, 10), QTime(22, 33, 1));
517
QTest::newRow("normal-2") << QDateTime(QDate(2006, 5, 10), QTime(13, 31, 23))
518
<< QDateTime(QDate(2006, 5, 10), QTime(13, 31, 23));
519
QTest::newRow("normal-3") << QDateTime(QDate(2007, 5, 10), QTime(22, 23, 23))
520
<< QDateTime(QDate(2007, 5, 10), QTime(22, 23, 23));
521
QTest::newRow("normal-4") << QDateTime(QDate(2008, 5, 10), QTime(2, 3, 1))
522
<< QDateTime(QDate(2008, 5, 10), QTime(2, 3, 1));
523
QTest::newRow("invalid-0") << QDateTime() << QDateTime(QDate(1752, 9, 14), QTime(0, 0, 0));
524
QTest::newRow("old") << QDateTime(QDate(1492, 8, 3), QTime(2, 3, 1))
525
<< QDateTime(QDate(1492, 8, 3), QTime(2, 3, 1));
528
void tst_QDateTimeEdit::minimumDateTime()
530
QFETCH(QDateTime, minimumDateTime);
531
QFETCH(QDateTime, expectedMinDateTime);
533
testWidget->setMinimumDateTime(minimumDateTime);
534
QCOMPARE(testWidget->minimumDateTime(), expectedMinDateTime);
537
void tst_QDateTimeEdit::maximumDateTime_data()
539
QTest::addColumn<QDateTime>("maximumDateTime");
540
QTest::addColumn<QDateTime>("expectedMinDateTime");
542
QTest::newRow("normal-0") << QDateTime(QDate(2004, 5, 10), QTime(2, 3, 14))
543
<< QDateTime(QDate(2004, 5, 10), QTime(2, 3, 14));
545
QTest::newRow("normal-1") << QDateTime(QDate(2005, 5, 10), QTime(22, 33, 1))
546
<< QDateTime(QDate(2005, 5, 10), QTime(22, 33, 1));
547
QTest::newRow("normal-2") << QDateTime(QDate(2006, 5, 10), QTime(13, 31, 23))
548
<< QDateTime(QDate(2006, 5, 10), QTime(13, 31, 23));
549
QTest::newRow("normal-3") << QDateTime(QDate(2007, 5, 10), QTime(22, 23, 23))
550
<< QDateTime(QDate(2007, 5, 10), QTime(22, 23, 23));
551
QTest::newRow("normal-4") << QDateTime(QDate(2008, 5, 10), QTime(2, 3, 1))
552
<< QDateTime(QDate(2008, 5, 10), QTime(2, 3, 1));
553
QTest::newRow("invalid-0") << QDateTime() << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
556
void tst_QDateTimeEdit::maximumDateTime()
558
QFETCH(QDateTime, maximumDateTime);
559
QFETCH(QDateTime, expectedMinDateTime);
561
testWidget->setMaximumDateTime(maximumDateTime);
562
QCOMPARE(testWidget->maximumDateTime(), expectedMinDateTime);
565
void tst_QDateTimeEdit::maximumDate_data()
567
QTest::addColumn<QDate>("maximumDate");
568
QTest::addColumn<QDate>("expectedMaxDate");
570
QTest::newRow("normal-0") << QDate(2004, 05, 10) << QDate(2004, 5, 10);
571
QTest::newRow("normal-1") << QDate(2002, 03, 15) << QDate(2002, 3, 15);
572
QTest::newRow("normal-2") << QDate(7999, 12, 31) << QDate(7999, 12, 31);
573
QTest::newRow("normal-3") << QDate(1753, 1, 1) << QDate(1753, 1, 1);
574
QTest::newRow("invalid-0") << QDate(0, 0, 0) << QDate(7999, 12, 31);
577
void tst_QDateTimeEdit::maximumDate()
579
QFETCH(QDate, maximumDate);
580
QFETCH(QDate, expectedMaxDate);
582
testWidget->setMaximumDate(maximumDate);
583
QCOMPARE(testWidget->maximumDate(), expectedMaxDate);
586
void tst_QDateTimeEdit::clearMinimumDate_data()
588
QTest::addColumn<QDate>("minimumDate");
589
QTest::addColumn<bool>("valid");
590
QTest::addColumn<QDate>("expectedMinDateAfterClear");
592
QTest::newRow("normal-0") << QDate(2004, 05, 10) << true << QDate(1752, 9, 14);
593
QTest::newRow("normal-1") << QDate(2002, 3, 15) << true << QDate(1752, 9, 14);
594
QTest::newRow("normal-2") << QDate(7999, 12, 31) << true << QDate(1752, 9, 14);
595
QTest::newRow("normal-3") << QDate(1753, 1, 1) << true << QDate(1752, 9, 14);
596
QTest::newRow("invalid-0") << QDate(0, 0, 0) << false << QDate(1752, 9, 14);
599
void tst_QDateTimeEdit::clearMinimumDate()
601
QFETCH(QDate, minimumDate);
603
QFETCH(QDate, expectedMinDateAfterClear);
605
testWidget->setMinimumDate(minimumDate);
607
QCOMPARE(testWidget->minimumDate(), minimumDate);
608
testWidget->clearMinimumDate();
609
QCOMPARE(testWidget->minimumDate(), expectedMinDateAfterClear);
612
void tst_QDateTimeEdit::clearMinimumDateTime_data()
614
QTest::addColumn<QDateTime>("minimumDateTime");
615
QTest::addColumn<bool>("valid");
616
QTest::addColumn<QDateTime>("expectedMinDateTimeAfterClear");
618
QTest::newRow("normal-0") << QDateTime(QDate(2004, 05, 10), QTime(12, 12, 12))
619
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
620
QTest::newRow("normal-1") << QDateTime(QDate(2002, 3, 15), QTime(13, 13, 13))
621
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
622
QTest::newRow("normal-2") << QDateTime(QDate(7999, 12, 31), QTime(14, 14, 14))
623
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
624
QTest::newRow("normal-3") << QDateTime(QDate(1753, 1, 1), QTime(15, 15, 15))
625
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
626
QTest::newRow("invalid-0") << QDateTime() << false << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
627
QTest::newRow("old") << QDateTime(QDate(1492, 8, 3), QTime(2, 3, 1)) << true
628
<< QDateTime(QDate(1752, 9, 14), QTime(0, 0));
631
void tst_QDateTimeEdit::clearMinimumDateTime()
633
QFETCH(QDateTime, minimumDateTime);
635
QFETCH(QDateTime, expectedMinDateTimeAfterClear);
637
testWidget->setMinimumDateTime(minimumDateTime);
639
QCOMPARE(testWidget->minimumDateTime(), minimumDateTime);
640
testWidget->clearMinimumDateTime();
641
QCOMPARE(testWidget->minimumDateTime(), expectedMinDateTimeAfterClear);
644
void tst_QDateTimeEdit::clearMaximumDateTime_data()
646
QTest::addColumn<QDateTime>("maximumDateTime");
647
QTest::addColumn<bool>("valid");
648
QTest::addColumn<QDateTime>("expectedMinDateTimeAfterClear");
650
QTest::newRow("normal-0") << QDateTime(QDate(2004, 05, 10), QTime(12, 12, 12))
651
<< true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
652
QTest::newRow("normal-1") << QDateTime(QDate(2002, 3, 15), QTime(13, 13, 13))
653
<< true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
654
QTest::newRow("normal-2") << QDateTime(QDate(7999, 12, 31), QTime(14, 14, 14))
655
<< true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
656
QTest::newRow("normal-3") << QDateTime(QDate(1753, 1, 1), QTime(15, 15, 15))
657
<< true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
658
QTest::newRow("invalid-0") << QDateTime()
659
<< false << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
662
void tst_QDateTimeEdit::clearMaximumDateTime()
664
QFETCH(QDateTime, maximumDateTime);
666
QFETCH(QDateTime, expectedMinDateTimeAfterClear);
668
testWidget->setMaximumDateTime(maximumDateTime);
670
QCOMPARE(testWidget->maximumDateTime(), maximumDateTime);
671
testWidget->clearMaximumDateTime();
672
QCOMPARE(testWidget->maximumDateTime(), expectedMinDateTimeAfterClear);
675
void tst_QDateTimeEdit::clearMaximumDate_data()
677
QTest::addColumn<QDate>("maximumDate");
678
QTest::addColumn<bool>("valid");
679
QTest::addColumn<QDate>("expectedMaxDateAfterClear");
681
QTest::newRow("normal-0") << QDate(2004, 05, 10) << true << QDate(7999, 12, 31);
682
QTest::newRow("normal-1") << QDate(2002, 03, 15) << true << QDate(7999, 12, 31);
683
QTest::newRow("normal-2") << QDate(7999, 12, 31) << true << QDate(7999, 12, 31);
684
QTest::newRow("normal-3") << QDate(2000, 1, 1) << true << QDate(7999, 12, 31);
685
QTest::newRow("invalid-0") << QDate(0, 0, 0) << false << QDate(7999, 12, 31);
688
void tst_QDateTimeEdit::clearMaximumDate()
690
QFETCH(QDate, maximumDate);
692
QFETCH(QDate, expectedMaxDateAfterClear);
694
testWidget->setMaximumDate(maximumDate);
696
QCOMPARE(testWidget->maximumDate(), maximumDate);
697
testWidget->clearMaximumDate();
698
QCOMPARE(testWidget->maximumDate(), expectedMaxDateAfterClear);
701
void tst_QDateTimeEdit::displayFormat_data()
703
QTest::addColumn<QString>("format");
704
QTest::addColumn<bool>("valid");
705
QTest::addColumn<QString>("text");
706
QTest::addColumn<QDateTime>("date");
708
const QDateTime dt(QDate(2999, 12, 31), QTime(3, 59, 59, 999));
710
QTest::newRow("valid-0") << QString("yyyy MM dd") << true << QString("2999 12 31") << dt;
711
QTest::newRow("valid-1") << QString("dd MM yyyy::ss:mm:hh") << true
712
<< QString("31 12 2999::59:59:03") << dt;
713
QTest::newRow("valid-2") << QString("hh-dd-mm-MM-yy") << true << QString("03-31-59-12-99") << dt;
714
QTest::newRow("valid-3") << QString("ddd MM d yyyy::ss:mm:hh") << true
715
<< QDate::shortDayName(2) + " 12 31 2999::59:59:03" << dt;
716
QTest::newRow("valid-4") << QString("hh-dd-mm-MM-yyyy") << true << QString("03-31-59-12-2999") << dt;
717
QTest::newRow("invalid-0") << QString("yyyy.MM.yy") << true << QString("2999.12.99") << dt;
718
QTest::newRow("invalid-1") << QString("y") << false << QString() << dt;
719
QTest::newRow("invalid-2") << QString("") << false << QString() << dt;
720
QTest::newRow("quoted-1") << QString("'Midday is at:' dd") << true << QString("Midday is at: 31") << dt;
721
QTest::newRow("leading1") << QString("h:hh:hhh") << true << QString("3:03:033") << dt;
722
QTest::newRow("H1") << QString("HH:hh:ap") << true << QString("03:03:am") << dt;
723
QTest::newRow("H2") << QString("HH:hh:ap") << true << QString("23:11:pm")
724
<< QDateTime(dt.date(), QTime(23, 0, 0));
727
void tst_QDateTimeEdit::displayFormat()
729
QFETCH(QString, format);
731
QFETCH(QString, text);
732
QFETCH(QDateTime, date);
734
testWidget->setDateTime(date);
736
QString compareFormat = format;
738
compareFormat = testWidget->displayFormat();
739
testWidget->setDisplayFormat(format);
740
QCOMPARE(testWidget->displayFormat(), compareFormat);
742
QCOMPARE(testWidget->text(), text);
745
void tst_QDateTimeEdit::selectAndScrollWithKeys()
748
QSKIP("QTBUG-23674");
752
qApp->setActiveWindow(testWidget);
753
testWidget->setDate(QDate(2004, 05, 11));
754
testWidget->setDisplayFormat("dd/MM/yyyy");
757
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
759
QTest::keyClick(testWidget, Qt::Key_Home);
761
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
762
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("1"));
763
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
764
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
765
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
766
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/"));
767
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
768
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/0"));
769
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
770
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05"));
771
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
772
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/"));
773
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
774
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/2"));
775
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
776
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/20"));
777
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
778
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/200"));
779
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
780
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/2004"));
781
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
782
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/2004"));
784
// Now the year part should be selected
785
QTest::keyClick(testWidget, Qt::Key_Up);
786
QCOMPARE(testWidget->date(), QDate(2005, 5, 11));
787
QCOMPARE(testWidget->currentSection(), QDateTimeEdit::YearSection);
788
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2005"));
789
QTest::keyClick(testWidget, Qt::Key_Down);
790
QCOMPARE(testWidget->date(), QDate(2004, 5, 11));
791
QCOMPARE(testWidget->currentSection(), QDateTimeEdit::YearSection);
792
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2004"));
796
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
798
QTest::keyClick(testWidget, Qt::Key_End);
800
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
801
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("4"));
802
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
803
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("04"));
804
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
805
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("004"));
806
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
807
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2004"));
808
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
809
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("/2004"));
810
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
811
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("5/2004"));
812
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
813
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05/2004"));
814
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
815
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("/05/2004"));
816
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
817
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("1/05/2004"));
818
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
819
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/2004"));
820
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
821
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11/05/2004"));
823
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
825
QTest::keyClick(testWidget, Qt::Key_Home);
828
// Now the day part should be selected
829
QTest::keyClick(testWidget, Qt::Key_Up);
830
QCOMPARE(testWidget->date(), QDate(2004, 5, 12));
831
QCOMPARE(testWidget->currentSection(), QDateTimeEdit::DaySection);
832
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("12"));
833
QTest::keyClick(testWidget, Qt::Key_Down);
834
QCOMPARE(testWidget->date(), QDate(2004, 5, 11));
835
QCOMPARE(testWidget->currentSection(), QDateTimeEdit::DaySection);
836
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
839
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
841
QTest::keyClick(testWidget, Qt::Key_Home);
844
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
845
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ShiftModifier);
846
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
847
// Now the day part should be selected
848
QTest::keyClick(testWidget, Qt::Key_Up);
849
QCOMPARE(testWidget->date(), QDate(2004, 05, 12));
852
void tst_QDateTimeEdit::backspaceKey()
854
qApp->setActiveWindow(testWidget);
855
testWidget->setDate(QDate(2004, 05, 11));
856
testWidget->setDisplayFormat("d/MM/yyyy");
859
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
861
QTest::keyClick(testWidget, Qt::Key_End);
863
QCOMPARE(testWidget->text(), QString("11/05/2004"));
864
QTest::keyClick(testWidget, Qt::Key_Backspace);
866
QEXPECT_FAIL("", "QTBUG-23674", Abort);
868
QCOMPARE(testWidget->text(), QString("11/05/200"));
869
QTest::keyClick(testWidget, Qt::Key_Backspace);
870
QCOMPARE(testWidget->text(), QString("11/05/20"));
871
// Check that moving into another field reverts it
872
for (int i=0;i<3;i++)
873
QTest::keyClick(testWidget, Qt::Key_Left);
874
QCOMPARE(testWidget->text(), QString("11/05/2004"));
876
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
878
QTest::keyClick(testWidget, Qt::Key_End);
880
for (int i=0;i<4;i++)
881
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ShiftModifier);
883
QTest::keyClick(testWidget, Qt::Key_Backspace);
884
QCOMPARE(testWidget->text(), QString("11/05/"));
885
QTest::keyClick(testWidget, Qt::Key_Left);
886
QTest::keyClick(testWidget, Qt::Key_Backspace);
887
QCOMPARE(testWidget->text(), QString("11/0/2004"));
888
testWidget->interpretText();
890
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
892
QTest::keyClick(testWidget, Qt::Key_End);
894
QTest::keyClick(testWidget, Qt::Key_Backspace);
895
QCOMPARE(testWidget->text(), QString("11/05/200"));
896
QTest::keyClick(testWidget, Qt::Key_Backspace);
897
QCOMPARE(testWidget->text(), QString("11/05/20"));
898
QTest::keyClick(testWidget, Qt::Key_Backspace);
899
QCOMPARE(testWidget->text(), QString("11/05/2"));
900
QTest::keyClick(testWidget, Qt::Key_Backspace);
901
QCOMPARE(testWidget->text(), QString("11/05/"));
902
QTest::keyClick(testWidget, Qt::Key_Left);
903
QTest::keyClick(testWidget, Qt::Key_Backspace);
904
QCOMPARE(testWidget->text(), QString("11/0/2004"));
905
QTest::keyClick(testWidget, Qt::Key_Backspace);
906
QCOMPARE(testWidget->text(), QString("11//2004"));
907
QTest::keyClick(testWidget, Qt::Key_Left);
908
QTest::keyClick(testWidget, Qt::Key_Backspace);
909
QCOMPARE(testWidget->text(), QString("1/05/2004"));
910
QTest::keyClick(testWidget, Qt::Key_Backspace);
911
QCOMPARE(testWidget->text(), QString("/05/2004"));
912
QTest::keyClick(testWidget, Qt::Key_Backspace);
913
QCOMPARE(testWidget->text(), QString("/05/2004"));
914
QTest::keyClick(testWidget, Qt::Key_Enter);
915
QCOMPARE(testWidget->text(), QString("1/05/2004"));
918
void tst_QDateTimeEdit::deleteKey()
920
qApp->setActiveWindow(testWidget);
921
testWidget->setDate(QDate(2004, 05, 11));
922
testWidget->setDisplayFormat("d/MM/yyyy");
924
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
926
QTest::keyClick(testWidget, Qt::Key_Home);
928
QTest::keyClick(testWidget, Qt::Key_Delete);
929
QCOMPARE(testWidget->text(), QString("1/05/2004"));
930
QTest::keyClick(testWidget, Qt::Key_Delete);
931
QCOMPARE(testWidget->text(), QString("/05/2004"));
932
QTest::keyClick(testWidget, Qt::Key_Right);
933
QTest::keyClick(testWidget, Qt::Key_Right);
934
QCOMPARE(testWidget->text(), QString("1/05/2004"));
937
void tst_QDateTimeEdit::tabKeyNavigation()
939
qApp->setActiveWindow(testWidget);
940
testWidget->setDate(QDate(2004, 05, 11));
941
testWidget->setDisplayFormat("dd/MM/yyyy");
943
testWidget->setCurrentSection(QDateTimeEdit::DaySection);
945
QTest::keyClick(testWidget, Qt::Key_Tab);
946
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05"));
947
QTest::keyClick(testWidget, Qt::Key_Tab);
948
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2004"));
949
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
950
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05"));
951
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
952
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
955
void tst_QDateTimeEdit::tabKeyNavigationWithPrefix()
957
qApp->setActiveWindow(testWidget);
958
testWidget->setDate(QDate(2004, 05, 11));
959
testWidget->setDisplayFormat("prefix dd/MM/yyyy");
961
QTest::keyClick(testWidget, Qt::Key_Tab);
962
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
963
QTest::keyClick(testWidget, Qt::Key_Tab);
964
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05"));
965
QTest::keyClick(testWidget, Qt::Key_Tab);
966
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2004"));
967
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
968
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05"));
969
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
970
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
973
void tst_QDateTimeEdit::tabKeyNavigationWithSuffix()
975
qApp->setActiveWindow(testWidget);
976
testWidget->setDate(QDate(2004, 05, 11));
977
testWidget->setDisplayFormat("dd/MM/yyyy 'suffix'");
979
QTest::keyClick(testWidget, Qt::Key_Tab);
980
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05"));
981
QTest::keyClick(testWidget, Qt::Key_Tab);
982
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2004"));
983
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
984
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("05"));
985
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
986
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
989
void tst_QDateTimeEdit::enterKey()
991
qApp->setActiveWindow(testWidget);
992
testWidget->setDate(QDate(2004, 5, 11));
993
testWidget->setDisplayFormat("prefix d/MM/yyyy 'suffix'");
994
testWidget->lineEdit()->setFocus();
997
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
999
QTest::keyClick(testWidget, Qt::Key_Home);
1001
QTest::keyClick(testWidget, Qt::Key_Enter);
1003
QEXPECT_FAIL("", "QTBUG-23674", Abort);
1005
QVERIFY(!testWidget->lineEdit()->hasSelectedText());
1007
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
1009
QTest::keyClick(testWidget, Qt::Key_End);
1011
QTest::keyClick(testWidget, Qt::Key_Enter);
1012
QVERIFY(!testWidget->lineEdit()->hasSelectedText());
1014
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
1016
QTest::keyClick(testWidget, Qt::Key_Home);
1018
QTest::keyClick(testWidget, Qt::Key_Tab);
1019
QTest::keyClick(testWidget, Qt::Key_Enter);
1020
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
1021
QTest::keyClick(testWidget, Qt::Key_1);
1022
QTest::keyClick(testWidget, Qt::Key_5);
1024
QTest::keyClick(testWidget, Qt::Key_Left);
1025
QTest::keyClick(testWidget, Qt::Key_Left);
1027
QTest::keyClick(testWidget, Qt::Key_Enter);
1028
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("15"));
1029
QCOMPARE(testWidget->date(), QDate(2004, 5, 15));
1031
QTest::keyClick(testWidget, Qt::Key_9);
1032
QTest::keyClick(testWidget, Qt::Key_Tab, Qt::ShiftModifier);
1033
QTest::keyClick(testWidget, Qt::Key_Enter);
1034
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("9"));
1035
QCOMPARE(testWidget->date(), QDate(2004, 5, 9));
1037
QTest::keyClick(testWidget, Qt::Key_0);
1038
QTest::keyClick(testWidget, Qt::Key_0);
1039
QTest::keyClick(testWidget, Qt::Key_Enter);
1040
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("9"));
1041
QCOMPARE(testWidget->date(), QDate(2004, 5, 9));
1043
// Current behaviour is that pressing the Enter key in a QDateTimeEdit
1044
// causes the dateChanged() signal to be emitted, even if the date
1045
// wasn't actually changed. While this behaviour is questionable,
1046
// we include this test so a change to the behaviour can't go unnoticed.
1047
QSignalSpy enterSpy(testWidget, SIGNAL(dateChanged(QDate)));
1048
QTest::keyClick(testWidget, Qt::Key_Enter);
1049
QCOMPARE(enterSpy.count(), 1);
1050
QVariantList list = enterSpy.takeFirst();
1051
QCOMPARE(list.at(0).toDate(), QDate(2004, 5, 9));
1054
void tst_QDateTimeEdit::specialValueText()
1056
testWidget->setDisplayFormat("dd/MM/yyyy");
1057
testWidget->setDateRange(QDate(2000, 1, 1), QDate(2001, 1, 1));
1058
testWidget->setDate(QDate(2000, 1, 2));
1059
testWidget->setSpecialValueText("fOo");
1060
testWidget->setCurrentSection(QDateTimeEdit::DaySection);
1061
QCOMPARE(testWidget->date(), QDate(2000, 1, 2));
1062
QCOMPARE(testWidget->text(), QString("02/01/2000"));
1063
QTest::keyClick(testWidget, Qt::Key_Down);
1064
QCOMPARE(testWidget->date(), QDate(2000, 1, 1));
1065
QCOMPARE(testWidget->text(), QString("fOo"));
1066
QTest::keyClick(testWidget, Qt::Key_Down);
1067
QCOMPARE(testWidget->date(), QDate(2000, 1, 1));
1068
QCOMPARE(testWidget->text(), QString("fOo"));
1069
QTest::keyClick(testWidget, Qt::Key_Up);
1070
QCOMPARE(testWidget->date(), QDate(2000, 1, 2));
1071
QCOMPARE(testWidget->text(), QString("02/01/2000"));
1072
QTest::keyClick(testWidget, Qt::Key_Down);
1073
QCOMPARE(testWidget->date(), QDate(2000, 1, 1));
1074
QCOMPARE(testWidget->text(), QString("fOo"));
1077
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
1079
QTest::keyClick(testWidget, Qt::Key_End);
1081
QTest::keyClick(testWidget, Qt::Key_Up);
1082
QCOMPARE(testWidget->date(), QDate(2000, 1, 2));
1083
QCOMPARE(testWidget->text(), QString("02/01/2000"));
1084
QTest::keyClick(testWidget, Qt::Key_Down);
1085
QCOMPARE(testWidget->text(), QString("fOo"));
1088
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
1090
QTest::keyClick(testWidget, Qt::Key_End);
1092
QTest::keyClick(testWidget, Qt::Key_Backspace);
1093
QCOMPARE(testWidget->text(), QString("fO"));
1094
QTest::keyClick(testWidget, Qt::Key_Backspace);
1095
QCOMPARE(testWidget->text(), QString("f"));
1096
QTest::keyClick(testWidget, Qt::Key_Backspace);
1097
QCOMPARE(testWidget->text(), QString());
1098
QTest::keyClick(testWidget, Qt::Key_F);
1099
QCOMPARE(testWidget->text(), QString("f"));
1100
QTest::keyClick(testWidget, Qt::Key_O); // will automatically uppercase
1101
QCOMPARE(testWidget->text(), QString("fO"));
1102
QTest::keyClick(testWidget, Qt::Key_O);
1103
QCOMPARE(testWidget->text(), QString("fOo"));
1106
void tst_QDateTimeEdit::setRange_data()
1108
QTest::addColumn<QTime>("minTime");
1109
QTest::addColumn<QTime>("maxTime");
1110
QTest::addColumn<QDate>("minDate");
1111
QTest::addColumn<QDate>("maxDate");
1112
QTest::addColumn<QDateTime>("expectedMin");
1113
QTest::addColumn<QDateTime>("expectedMax");
1115
const QDate cdt = QDate::currentDate();
1117
QTest::newRow("data0") << QTime(0, 0) << QTime(14, 12, 0)
1119
<< QDateTime(cdt, QTime(0, 0))
1120
<< QDateTime(cdt, QTime(14, 12, 0));
1122
QTest::newRow("data1") << QTime(10, 0) << QTime(1, 12, 0) << cdt.addDays(-1)
1124
<< QDateTime(cdt.addDays(-1), QTime(10, 0))
1125
<< QDateTime(cdt, QTime(1, 12, 0));
1128
void tst_QDateTimeEdit::setRange()
1130
QFETCH(QTime, minTime);
1131
QFETCH(QTime, maxTime);
1132
QFETCH(QDate, minDate);
1133
QFETCH(QDate, maxDate);
1134
QFETCH(QDateTime, expectedMin);
1135
QFETCH(QDateTime, expectedMax);
1139
QDateTimeEdit dte(0);
1140
dte.setTimeRange(minTime, maxTime);
1141
QCOMPARE(dte.minimumTime(), expectedMin.time());
1142
QCOMPARE(dte.maximumTime(), expectedMax.time());
1143
dte.setDateRange(minDate, maxDate);
1144
QCOMPARE(dte.minimumDate(), expectedMin.date());
1145
QCOMPARE(dte.minimumDateTime(), expectedMin);
1146
QCOMPARE(dte.maximumDate(), expectedMax.date());
1147
QCOMPARE(dte.maximumDateTime(), expectedMax);
1148
QCOMPARE(dte.minimumTime(), expectedMin.time());
1149
QCOMPARE(dte.maximumTime(), expectedMax.time());
1150
dte.setDateTimeRange(QDateTime(minDate, minTime), QDateTime(maxDate, maxTime));
1151
QCOMPARE(dte.minimumDate(), expectedMin.date());
1152
QCOMPARE(dte.minimumDateTime(), expectedMin);
1153
QCOMPARE(dte.maximumDate(), expectedMax.date());
1154
QCOMPARE(dte.maximumDateTime(), expectedMax);
1155
QCOMPARE(dte.minimumTime(), expectedMin.time());
1156
QCOMPARE(dte.maximumTime(), expectedMax.time());
1160
QDateTimeEdit dte2(0);
1161
dte2.setDateRange(minDate, maxDate);
1162
dte2.setTimeRange(minTime, maxTime);
1164
QCOMPARE(dte2.minimumDate(), expectedMin.date());
1165
QCOMPARE(dte2.maximumDate(), expectedMax.date());
1166
QCOMPARE(dte2.minimumTime(), expectedMin.time());
1167
QCOMPARE(dte2.maximumTime(), expectedMax.time());
1171
QDateTimeEdit dte3(0);
1172
dte3.setMinimumTime(minTime);
1173
dte3.setMaximumTime(maxTime);
1174
dte3.setMinimumDate(minDate);
1175
dte3.setMaximumDate(maxDate);
1177
QCOMPARE(dte3.minimumDate(), expectedMin.date());
1178
QCOMPARE(dte3.maximumDate(), expectedMax.date());
1179
QCOMPARE(dte3.minimumTime(), expectedMin.time());
1180
QCOMPARE(dte3.maximumTime(), expectedMax.time());
1184
QDateTimeEdit dte4(0);
1185
dte4.setMinimumDate(minDate);
1186
dte4.setMaximumDate(maxDate);
1187
dte4.setMinimumTime(minTime);
1188
dte4.setMaximumTime(maxTime);
1190
QCOMPARE(dte4.minimumDate(), expectedMin.date());
1191
QCOMPARE(dte4.maximumDate(), expectedMax.date());
1192
QCOMPARE(dte4.minimumTime(), expectedMin.time());
1193
QCOMPARE(dte4.maximumTime(), expectedMax.time());
1197
void tst_QDateTimeEdit::wrappingTime_data()
1199
QTest::addColumn<bool>("startWithMin");
1200
QTest::addColumn<QTime>("minimumTime");
1201
QTest::addColumn<QTime>("maximumTime");
1202
QTest::addColumn<uint>("section");
1203
QTest::addColumn<QTime>("newTime");
1205
QTest::newRow("data0") << false << QTime(0,0,0) << QTime(2,2,2) << (uint)QDateTimeEdit::HourSection
1207
QTest::newRow("data1") << true << QTime(0,0,0) << QTime(2,2,2) << (uint)QDateTimeEdit::HourSection
1209
QTest::newRow("data2") << false << QTime(0,0,0) << QTime(2,2,2) << (uint)QDateTimeEdit::MinuteSection
1211
QTest::newRow("data3") << true << QTime(0,0,0) << QTime(2,2,2) << (uint)QDateTimeEdit::MinuteSection
1213
QTest::newRow("data4") << false << QTime(0,0,0) << QTime(2,2,2) << (uint)QDateTimeEdit::SecondSection
1215
QTest::newRow("data5") << true << QTime(0,0,0) << QTime(2,2,2) << (uint)QDateTimeEdit::SecondSection
1217
QTest::newRow("data6") << false << QTime(1,1,1) << QTime(22,22,22) << (uint)QDateTimeEdit::HourSection
1219
QTest::newRow("data7") << true << QTime(1,1,1) << QTime(22,22,22) << (uint)QDateTimeEdit::HourSection
1221
QTest::newRow("data8") << false << QTime(1,1,1) << QTime(22,22,22) << (uint)QDateTimeEdit::MinuteSection
1223
QTest::newRow("data9") << true << QTime(1,1,1) << QTime(22,22,22) << (uint)QDateTimeEdit::MinuteSection
1225
QTest::newRow("data10") << false << QTime(1,1,1) << QTime(22,22,22) << (uint)QDateTimeEdit::SecondSection
1227
QTest::newRow("data11") << true << QTime(1,1,1) << QTime(22,22,22) << (uint)QDateTimeEdit::SecondSection
1229
QTest::newRow("data12") << false << QTime(1,1,1) << QTime(1,2,1) << (uint)QDateTimeEdit::HourSection
1231
QTest::newRow("data13") << true << QTime(1,1,1) << QTime(1,2,1) << (uint)QDateTimeEdit::HourSection
1233
QTest::newRow("data14") << false << QTime(1,1,1) << QTime(1,2,1) << (uint)QDateTimeEdit::MinuteSection
1235
QTest::newRow("data15") << true << QTime(1,1,1) << QTime(1,2,1) << (uint)QDateTimeEdit::MinuteSection
1237
QTest::newRow("data16") << false << QTime(1,1,1) << QTime(1,2,1) << (uint)QDateTimeEdit::SecondSection
1239
QTest::newRow("data17") << true << QTime(1,1,1) << QTime(1,2,1) << (uint)QDateTimeEdit::SecondSection
1243
void tst_QDateTimeEdit::wrappingTime()
1245
QFETCH(bool, startWithMin);
1246
QFETCH(QTime, minimumTime);
1247
QFETCH(QTime, maximumTime);
1248
QFETCH(uint, section);
1249
QFETCH(QTime, newTime);
1251
testWidget->setDisplayFormat("hh:mm:ss");
1252
testWidget->setMinimumTime(minimumTime);
1253
testWidget->setMaximumTime(maximumTime);
1254
testWidget->setWrapping(true);
1255
testWidget->setCurrentSection((QDateTimeEdit::Section)section);
1257
testWidget->setTime(minimumTime);
1258
QTest::keyClick(testWidget, Qt::Key_Down);
1260
testWidget->setTime(maximumTime);
1261
QTest::keyClick(testWidget, Qt::Key_Up);
1263
QTest::keyClick(testWidget, Qt::Key_Enter);
1264
QCOMPARE(testWidget->time(), newTime);
1267
void tst_QDateTimeEdit::userKeyPress_Time_data()
1269
QTest::addColumn<bool>("ampm");
1270
QTest::addColumn<QTestEventList>("keys");
1271
QTest::addColumn<QTime>("expected_time");
1273
// ***************** test the hours ***************
1275
// use up/down keys to change hour in 12 h mode
1277
QTestEventList keys;
1278
keys.addKeyClick( Qt::Key_Down );
1279
QTime expected( 10, 0, 0 );
1280
QTest::newRow( "data0" ) << bool(true) << keys << expected;
1283
QTestEventList keys;
1284
for (uint i=0; i<5; i++)
1285
keys.addKeyClick( Qt::Key_Down );
1286
QTime expected( 6, 0, 0 );
1287
QTest::newRow( "data1" ) << bool(true) << keys << expected;
1290
QTestEventList keys;
1291
for (uint i=0; i<10; i++)
1292
keys.addKeyClick( Qt::Key_Down );
1293
QTime expected( 1, 0, 0 );
1294
QTest::newRow( "data2" ) << bool(true) << keys << expected;
1297
QTestEventList keys;
1298
for (uint i=0; i<12; i++)
1299
keys.addKeyClick( Qt::Key_Down );
1300
QTime expected( 23, 0, 0 );
1301
QTest::newRow( "data3" ) << bool(true) << keys << expected;
1304
QTestEventList keys;
1305
keys.addKeyClick( Qt::Key_Up );
1306
QTime expected( 12, 0, 0 );
1307
QTest::newRow( "data4" ) << bool(true) << keys << expected;
1310
QTestEventList keys;
1311
for (uint i=0; i<2; i++)
1312
keys.addKeyClick( Qt::Key_Up );
1313
QTime expected( 13, 0, 0 );
1314
QTest::newRow( "data5" ) << bool(true) << keys << expected;
1317
// use up/down keys to change hour in 24 h mode
1319
QTestEventList keys;
1320
keys.addKeyClick( Qt::Key_Down );
1321
QTime expected( 10, 0, 0 );
1322
QTest::newRow( "data6" ) << bool(false) << keys << expected;
1325
QTestEventList keys;
1326
for (uint i=0; i<5; i++)
1327
keys.addKeyClick( Qt::Key_Down );
1328
QTime expected( 6, 0, 0 );
1329
QTest::newRow( "data7" ) << bool(false) << keys << expected;
1332
QTestEventList keys;
1333
for (uint i=0; i<10; i++)
1334
keys.addKeyClick( Qt::Key_Down );
1335
QTime expected( 1, 0, 0 );
1336
QTest::newRow( "data8" ) << bool(false) << keys << expected;
1339
QTestEventList keys;
1340
for (uint i=0; i<12; i++)
1341
keys.addKeyClick( Qt::Key_Down );
1342
QTime expected( 23, 0, 0 );
1343
QTest::newRow( "data9" ) << bool(false) << keys << expected;
1346
QTestEventList keys;
1347
keys.addKeyClick( Qt::Key_Up );
1348
QTime expected( 12, 0, 0 );
1349
QTest::newRow( "data10" ) << bool(false) << keys << expected;
1352
QTestEventList keys;
1353
for (uint i=0; i<2; i++)
1354
keys.addKeyClick( Qt::Key_Up );
1355
QTime expected( 13, 0, 0 );
1356
QTest::newRow( "data11" ) << bool(false) << keys << expected;
1359
// enter a one digit valid hour
1361
QTestEventList keys;
1362
keys.addKeyClick( '5' );
1363
QTime expected( 5, 0, 0 );
1364
QTest::newRow( "data12" ) << bool(true) << keys << expected;
1367
// entering a two digit valid hour
1369
QTestEventList keys;
1370
keys.addKeyClick( '1' );
1371
keys.addKeyClick( '1' );
1372
QTime expected( 11, 0, 0 );
1373
QTest::newRow( "data13" ) << bool(true) << keys << expected;
1376
// entering an invalid hour
1378
QTestEventList keys;
1379
keys.addKeyClick( '2' );
1380
// the '5' creates an invalid hour (25) so it must be ignored
1381
keys.addKeyClick( '5' );
1382
QTime expected( 2, 0, 0 );
1383
QTest::newRow( "data14" ) << bool(true) << keys << expected;
1386
// enter a value, in hour which causes a field change
1388
QTestEventList keys;
1389
keys.addKeyClick( '0' );
1390
keys.addKeyClick( '2' );
1391
keys.addKeyClick( '1' );
1392
QTime expected( 2, 1, 0 );
1393
QTest::newRow( "data15" ) << bool(true) << keys << expected;
1396
// enter a one digit valid hour in 24 h mode
1398
QTestEventList keys;
1399
keys.addKeyClick( '5' );
1400
QTime expected( 5, 0, 0 );
1401
QTest::newRow( "data16" ) << bool(false) << keys << expected;
1404
// enter a two digit valid hour in 24 h mode
1406
QTestEventList keys;
1407
keys.addKeyClick( '1' );
1408
keys.addKeyClick( '1' );
1409
QTime expected( 11, 0, 0 );
1410
QTest::newRow( "data17" ) << bool(false) << keys << expected;
1413
// enter a two digit valid hour (>12) in 24 h mode
1415
QTestEventList keys;
1416
keys.addKeyClick( '1' );
1417
keys.addKeyClick( '5' );
1418
QTime expected( 15, 0, 0 );
1419
QTest::newRow( "data18" ) << bool(false) << keys << expected;
1422
// enter a two digit valid hour (>20) in 24 h mode
1424
QTestEventList keys;
1425
keys.addKeyClick( '2' );
1426
keys.addKeyClick( '1' );
1427
QTime expected( 21, 0, 0 );
1428
QTest::newRow( "data19" ) << bool(false) << keys << expected;
1431
// enter a two digit invalid hour (>23) in 24 h mode
1433
QTestEventList keys;
1434
keys.addKeyClick( '2' );
1435
keys.addKeyClick( '4' );
1436
QTime expected( 2, 0, 0 );
1437
QTest::newRow( "data20" ) << bool(false) << keys << expected;
1440
// ***************** test the minutes ***************
1442
// use up/down keys to change the minutes in 12 hour mode
1443
{ // test a valid value
1444
QTestEventList keys;
1445
keys.addKeyClick( Qt::Key_Tab );
1446
for (uint i=0; i<2; i++)
1447
keys.addKeyClick( Qt::Key_Up );
1448
QTime expected( 11, 2, 0 );
1449
QTest::newRow( "data21" ) << bool(true) << keys << expected;
1451
{ // test a valid value
1452
QTestEventList keys;
1453
keys.addKeyClick( Qt::Key_Tab );
1454
for (uint i=0; i<16; i++)
1455
keys.addKeyClick( Qt::Key_Up );
1456
QTime expected( 11, 16, 0 );
1457
QTest::newRow( "data22" ) << bool(true) << keys << expected;
1459
{ // test maximum value
1460
QTestEventList keys;
1461
keys.addKeyClick( Qt::Key_Tab );
1462
for (uint i=0; i<59; i++)
1463
keys.addKeyClick( Qt::Key_Up );
1464
QTime expected( 11, 59, 0 );
1465
QTest::newRow( "data23" ) << bool(true) << keys << expected;
1467
{ // test 'overflow'
1468
QTestEventList keys;
1469
keys.addKeyClick( Qt::Key_Tab );
1470
for (uint i=0; i<60; i++)
1471
keys.addKeyClick( Qt::Key_Up );
1472
QTime expected( 11, 0, 0 );
1473
QTest::newRow( "data24" ) << bool(true) << keys << expected;
1475
{ // test 'underflow'
1476
QTestEventList keys;
1477
keys.addKeyClick( Qt::Key_Tab );
1478
keys.addKeyClick( Qt::Key_Down );
1479
QTime expected( 11, 59, 0 );
1480
QTest::newRow( "data25" ) << bool(true) << keys << expected;
1482
{ // test valid value
1483
QTestEventList keys;
1484
keys.addKeyClick( Qt::Key_Tab );
1485
for (uint i=0; i<2; i++)
1486
keys.addKeyClick( Qt::Key_Down );
1487
QTime expected( 11, 58, 0 );
1488
QTest::newRow( "data26" ) << bool(true) << keys << expected;
1491
// use up/down keys to change the minutes in 24 hour mode
1493
{ // test a valid value
1494
QTestEventList keys;
1495
keys.addKeyClick( Qt::Key_Tab );
1496
for (uint i=0; i<2; i++)
1497
keys.addKeyClick( Qt::Key_Up );
1498
QTime expected( 11, 2, 0 );
1499
QTest::newRow( "data27" ) << bool(false) << keys << expected;
1501
{ // test a valid value
1502
QTestEventList keys;
1503
keys.addKeyClick( Qt::Key_Tab );
1504
for (uint i=0; i<16; i++)
1505
keys.addKeyClick( Qt::Key_Up );
1506
QTime expected( 11, 16, 0 );
1507
QTest::newRow( "data28" ) << bool(false) << keys << expected;
1509
{ // test maximum value
1510
QTestEventList keys;
1511
keys.addKeyClick( Qt::Key_Tab );
1512
for (uint i=0; i<59; i++)
1513
keys.addKeyClick( Qt::Key_Up );
1514
QTime expected( 11, 59, 0 );
1515
QTest::newRow( "data29" ) << bool(false) << keys << expected;
1517
{ // test 'overflow'
1518
QTestEventList keys;
1519
keys.addKeyClick( Qt::Key_Tab );
1520
for (uint i=0; i<60; i++)
1521
keys.addKeyClick( Qt::Key_Up );
1522
QTime expected( 11, 0, 0 );
1523
QTest::newRow( "data30" ) << bool(false) << keys << expected;
1525
{ // test 'underflow'
1526
QTestEventList keys;
1527
keys.addKeyClick( Qt::Key_Tab );
1528
keys.addKeyClick( Qt::Key_Down );
1529
QTime expected( 11, 59, 0 );
1530
QTest::newRow( "data31" ) << bool(false) << keys << expected;
1532
{ // test valid value
1533
QTestEventList keys;
1534
keys.addKeyClick( Qt::Key_Tab );
1535
for (uint i=0; i<2; i++)
1536
keys.addKeyClick( Qt::Key_Down );
1537
QTime expected( 11, 58, 0 );
1538
QTest::newRow( "data32" ) << bool(false) << keys << expected;
1541
// enter a valid one digit minute in 12 h mode
1543
QTestEventList keys;
1544
keys.addKeyClick(Qt::Key_Tab);
1545
keys.addKeyClick( '2' );
1546
QTime expected( 11, 2, 0 );
1547
QTest::newRow( "data33" ) << bool(true) << keys << expected;
1550
// enter a valid two digit minutes in 12 h mode
1552
QTestEventList keys;
1553
keys.addKeyClick(Qt::Key_Tab);
1554
keys.addKeyClick( '2' );
1555
keys.addKeyClick( '4' );
1556
QTime expected( 11, 24, 0 );
1557
QTest::newRow( "data34" ) << bool(true) << keys << expected;
1560
// check the lower limit of the minutes in 12 h mode
1562
QTestEventList keys;
1563
keys.addKeyClick(Qt::Key_Tab);
1564
keys.addKeyClick( '0' );
1565
QTime expected( 11, 0, 0 );
1566
QTest::newRow( "data35" ) << bool(true) << keys << expected;
1569
// check the upper limit of the minutes in 12 h mode
1571
QTestEventList keys;
1572
keys.addKeyClick(Qt::Key_Tab);
1573
keys.addKeyClick( '5' );
1574
keys.addKeyClick( '9' );
1575
QTime expected( 11, 59, 0 );
1576
QTest::newRow( "data36" ) << bool(true) << keys << expected;
1579
// enter an invalid two digit minutes in 12 h mode
1581
QTestEventList keys;
1582
keys.addKeyClick( Qt::Key_Tab );
1583
keys.addKeyClick( '6' );
1584
keys.addKeyClick( '0' );
1585
QTime expected( 11, 6, 0 );
1586
QTest::newRow( "data37" ) << bool(true) << keys << expected;
1589
// test minutes in 24 hour motestWidget-> Behaviour should be exactly the same
1591
// enter a valid one digit minute in 24 h mode
1593
QTestEventList keys;
1594
keys.addKeyClick( Qt::Key_Tab );
1595
keys.addKeyClick( '2' );
1596
QTime expected( 11, 2, 0 );
1597
QTest::newRow( "data38" ) << bool(false) << keys << expected;
1600
// enter a valid two digit minutes in 24 h mode
1602
QTestEventList keys;
1603
keys.addKeyClick( Qt::Key_Tab );
1604
keys.addKeyClick( '2' );
1605
keys.addKeyClick( '4' );
1606
QTime expected( 11, 24, 0 );
1607
QTest::newRow( "data39" ) << bool(false) << keys << expected;
1610
// check the lower limit of the minutes in 24 h mode
1612
QTestEventList keys;
1613
keys.addKeyClick( Qt::Key_Tab );
1614
keys.addKeyClick( '0' );
1615
QTime expected( 11, 0, 0 );
1616
QTest::newRow( "data40" ) << bool(false) << keys << expected;
1619
// check the upper limit of the minutes in 24 h mode
1621
QTestEventList keys;
1622
keys.addKeyClick( Qt::Key_Tab );
1623
keys.addKeyClick( '5' );
1624
keys.addKeyClick( '9' );
1625
QTime expected( 11, 59, 0 );
1626
QTest::newRow( "data41" ) << bool(false) << keys << expected;
1629
// enter an invalid two digit minutes in 24 h mode
1631
QTestEventList keys;
1632
keys.addKeyClick( Qt::Key_Tab );
1633
keys.addKeyClick( '6' );
1634
keys.addKeyClick( '0' );
1635
QTime expected( 11, 6, 0 );
1636
QTest::newRow( "data42" ) << bool(false) << keys << expected;
1639
// ***************** test the seconds ***************
1641
// use up/down to edit the seconds...
1643
// use up/down keys to change the seconds in 12 hour mode
1644
{ // test a valid value
1645
QTestEventList keys;
1646
keys.addKeyClick( Qt::Key_Tab );
1647
keys.addKeyClick( Qt::Key_Tab );
1648
for (uint i=0; i<2; i++)
1649
keys.addKeyClick( Qt::Key_Up );
1650
QTime expected( 11, 0, 2 );
1651
QTest::newRow( "data43" ) << bool(true) << keys << expected;
1653
{ // test a valid value
1654
QTestEventList keys;
1655
keys.addKeyClick( Qt::Key_Tab );
1656
keys.addKeyClick( Qt::Key_Tab );
1657
for (uint i=0; i<16; i++)
1658
keys.addKeyClick( Qt::Key_Up );
1659
QTime expected( 11, 0, 16 );
1660
QTest::newRow( "data44" ) << bool(true) << keys << expected;
1662
{ // test maximum value
1663
QTestEventList keys;
1664
keys.addKeyClick( Qt::Key_Tab );
1665
keys.addKeyClick( Qt::Key_Tab );
1666
for (uint i=0; i<59; i++)
1667
keys.addKeyClick( Qt::Key_Up );
1668
QTime expected( 11, 0, 59 );
1669
QTest::newRow( "data45" ) << bool(true) << keys << expected;
1671
{ // test 'overflow'
1672
QTestEventList keys;
1673
keys.addKeyClick( Qt::Key_Tab );
1674
keys.addKeyClick( Qt::Key_Tab );
1675
for (uint i=0; i<60; i++)
1676
keys.addKeyClick( Qt::Key_Up );
1677
QTime expected( 11, 0, 0 );
1678
QTest::newRow( "data46" ) << bool(true) << keys << expected;
1680
{ // test 'underflow'
1681
QTestEventList keys;
1682
keys.addKeyClick( Qt::Key_Tab );
1683
keys.addKeyClick( Qt::Key_Tab );
1684
keys.addKeyClick( Qt::Key_Down );
1685
QTime expected( 11, 0, 59 );
1686
QTest::newRow( "data47" ) << bool(true) << keys << expected;
1688
{ // test valid value
1689
QTestEventList keys;
1690
keys.addKeyClick( Qt::Key_Tab );
1691
keys.addKeyClick( Qt::Key_Tab );
1692
for (uint i=0; i<2; i++)
1693
keys.addKeyClick( Qt::Key_Down );
1694
QTime expected( 11, 0, 58 );
1695
QTest::newRow( "data48" ) << bool(true) << keys << expected;
1698
// use up/down keys to change the seconds in 24 hour mode
1700
{ // test a valid value
1701
QTestEventList keys;
1702
keys.addKeyClick( Qt::Key_Tab );
1703
keys.addKeyClick( Qt::Key_Tab );
1704
for (uint i=0; i<2; i++)
1705
keys.addKeyClick( Qt::Key_Up );
1706
QTime expected( 11, 0, 2 );
1707
QTest::newRow( "data49" ) << bool(false) << keys << expected;
1709
{ // test a valid value
1710
QTestEventList keys;
1711
keys.addKeyClick( Qt::Key_Tab );
1712
keys.addKeyClick( Qt::Key_Tab );
1713
for (uint i=0; i<16; i++)
1714
keys.addKeyClick( Qt::Key_Up );
1715
QTime expected( 11, 0, 16 );
1716
QTest::newRow( "data50" ) << bool(false) << keys << expected;
1718
{ // test maximum value
1719
QTestEventList keys;
1720
keys.addKeyClick( Qt::Key_Tab );
1721
keys.addKeyClick( Qt::Key_Tab );
1722
for (uint i=0; i<59; i++)
1723
keys.addKeyClick( Qt::Key_Up );
1724
QTime expected( 11, 0, 59 );
1725
QTest::newRow( "data51" ) << bool(false) << keys << expected;
1727
{ // test 'overflow'
1728
QTestEventList keys;
1729
keys.addKeyClick( Qt::Key_Tab );
1730
keys.addKeyClick( Qt::Key_Tab );
1731
for (uint i=0; i<60; i++)
1732
keys.addKeyClick( Qt::Key_Up );
1733
QTime expected( 11, 0, 0 );
1734
QTest::newRow( "data52" ) << bool(false) << keys << expected;
1736
{ // test 'underflow'
1737
QTestEventList keys;
1738
keys.addKeyClick( Qt::Key_Tab );
1739
keys.addKeyClick( Qt::Key_Tab );
1740
keys.addKeyClick( Qt::Key_Down );
1741
QTime expected( 11, 0, 59 );
1742
QTest::newRow( "data53" ) << bool(false) << keys << expected;
1744
{ // test valid value
1745
QTestEventList keys;
1746
keys.addKeyClick( Qt::Key_Tab );
1747
keys.addKeyClick( Qt::Key_Tab );
1748
for (uint i=0; i<2; i++)
1749
keys.addKeyClick( Qt::Key_Down );
1750
QTime expected( 11, 0, 58 );
1751
QTest::newRow( "data54" ) << bool(false) << keys << expected;
1754
// enter a valid one digit second in 12 h mode
1756
QTestEventList keys;
1757
keys.addKeyClick( Qt::Key_Tab );
1758
keys.addKeyClick( Qt::Key_Tab );
1759
keys.addKeyClick( '2' );
1760
QTime expected( 11, 0, 2 );
1761
QTest::newRow( "data55" ) << bool(true) << keys << expected;
1764
// enter a valid two digit seconds in 12 h mode
1766
QTestEventList keys;
1767
keys.addKeyClick( Qt::Key_Tab );
1768
keys.addKeyClick( Qt::Key_Tab );
1769
keys.addKeyClick( '2' );
1770
keys.addKeyClick( '4' );
1771
QTime expected( 11, 0, 24 );
1772
QTest::newRow( "data56" ) << bool(true) << keys << expected;
1775
// check the lower limit of the seconds in 12 h mode
1777
QTestEventList keys;
1778
keys.addKeyClick( Qt::Key_Tab );
1779
keys.addKeyClick( Qt::Key_Tab );
1780
keys.addKeyClick( '0' );
1781
QTime expected( 11, 0, 0 );
1782
QTest::newRow( "data57" ) << bool(true) << keys << expected;
1785
// check the upper limit of the seconds in 12 h mode
1787
QTestEventList keys;
1788
keys.addKeyClick( Qt::Key_Tab );
1789
keys.addKeyClick( Qt::Key_Tab );
1790
keys.addKeyClick( '5' );
1791
keys.addKeyClick( '9' );
1792
QTime expected( 11, 0, 59 );
1793
QTest::newRow( "data58" ) << bool(true) << keys << expected;
1796
// enter an invalid two digit seconds in 12 h mode
1798
QTestEventList keys;
1799
keys.addKeyClick( Qt::Key_Tab );
1800
keys.addKeyClick( Qt::Key_Tab );
1801
keys.addKeyClick( '6' );
1802
keys.addKeyClick( '0' );
1803
QTime expected( 11, 0, 6 );
1804
QTest::newRow( "data59" ) << bool(true) << keys << expected;
1807
// test seconds in 24 hour mode. Behaviour should be exactly the same
1809
// enter a valid one digit minute in 24 h mode
1811
QTestEventList keys;
1812
keys.addKeyClick( Qt::Key_Tab );
1813
keys.addKeyClick( Qt::Key_Tab );
1814
keys.addKeyClick( '2' );
1815
QTime expected( 11, 0, 2 );
1816
QTest::newRow( "data60" ) << bool(false) << keys << expected;
1819
// enter a valid two digit seconds in 24 h mode
1821
QTestEventList keys;
1822
keys.addKeyClick( Qt::Key_Tab );
1823
keys.addKeyClick( Qt::Key_Tab );
1824
keys.addKeyClick( '2' );
1825
keys.addKeyClick( '4' );
1826
QTime expected( 11, 0, 24 );
1827
QTest::newRow( "data61" ) << bool(false) << keys << expected;
1830
// check the lower limit of the seconds in 24 h mode
1832
QTestEventList keys;
1833
keys.addKeyClick( Qt::Key_Tab );
1834
keys.addKeyClick( Qt::Key_Tab );
1835
keys.addKeyClick( '0' );
1836
QTime expected( 11, 0, 0 );
1837
QTest::newRow( "data62" ) << bool(false) << keys << expected;
1840
// check the upper limit of the seconds in 24 h mode
1842
QTestEventList keys;
1843
keys.addKeyClick( Qt::Key_Tab );
1844
keys.addKeyClick( Qt::Key_Tab );
1845
keys.addKeyClick( '5' );
1846
keys.addKeyClick( '9' );
1847
QTime expected( 11, 0, 59 );
1848
QTest::newRow( "data63" ) << bool(false) << keys << expected;
1851
// enter an invalid two digit seconds in 24 h mode
1853
QTestEventList keys;
1854
keys.addKeyClick( Qt::Key_Tab );
1855
keys.addKeyClick( Qt::Key_Tab );
1856
keys.addKeyClick( '6' );
1857
keys.addKeyClick( '0' );
1858
QTime expected( 11, 0, 6 );
1859
QTest::newRow( "data64" ) << bool(false) << keys << expected;
1862
// Test the AMPM indicator
1864
QTestEventList keys;
1865
keys.addKeyClick( Qt::Key_Tab );
1866
keys.addKeyClick( Qt::Key_Tab );
1867
keys.addKeyClick( Qt::Key_Tab );
1868
keys.addKeyClick( Qt::Key_Up );
1869
QTime expected( 23, 0, 0 );
1870
QTest::newRow( "data65" ) << bool(true) << keys << expected;
1872
// Test the AMPM indicator
1874
QTestEventList keys;
1875
keys.addKeyClick( Qt::Key_Tab );
1876
keys.addKeyClick( Qt::Key_Tab );
1877
keys.addKeyClick( Qt::Key_Tab );
1878
keys.addKeyClick( Qt::Key_Down );
1879
QTime expected( 23, 0, 0 );
1880
QTest::newRow( "data66" ) << bool(true) << keys << expected;
1882
// Test the AMPM indicator
1884
QTestEventList keys;
1885
keys.addKeyClick( Qt::Key_Tab );
1886
keys.addKeyClick( Qt::Key_Tab );
1887
keys.addKeyClick( Qt::Key_Tab );
1888
keys.addKeyClick( Qt::Key_Down );
1889
keys.addKeyClick( Qt::Key_Down );
1890
QTime expected( 11, 0, 0 );
1891
QTest::newRow( "data67" ) << bool(true) << keys << expected;
1893
// Test the AMPM indicator
1895
QTestEventList keys;
1896
keys.addKeyClick( Qt::Key_Tab );
1897
keys.addKeyClick( Qt::Key_Tab );
1898
keys.addKeyClick( Qt::Key_Tab );
1899
keys.addKeyClick( Qt::Key_Up );
1900
keys.addKeyClick( Qt::Key_Down );
1901
QTime expected( 11, 0, 0 );
1902
QTest::newRow( "data68" ) << bool(true) << keys << expected;
1906
void tst_QDateTimeEdit::userKeyPress_Time()
1909
QFETCH(QTestEventList, keys);
1910
QFETCH(QTime, expected_time);
1913
testWidget->setDisplayFormat("hh:mm:ss ap");
1915
testWidget->setDisplayFormat("hh:mm:ss");
1917
testWidget->setTime(QTime(11, 0, 0));
1918
testWidget->setFocus();
1920
testWidget->setWrapping(true);
1922
QTest::keyClick(testWidget, Qt::Key_Enter); // Make sure the first section is now focused
1923
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("11"));
1924
keys.simulate(testWidget);
1925
QTest::keyClick(testWidget, Qt::Key_Enter);
1927
QCOMPARE(testWidget->time(), expected_time);
1930
void tst_QDateTimeEdit::wrappingDate_data()
1932
QTest::addColumn<bool>("startWithMin");
1933
QTest::addColumn<QDate>("minimumDate");
1934
QTest::addColumn<QDate>("maximumDate");
1935
QTest::addColumn<uint>("section");
1936
QTest::addColumn<QDate>("newDate");
1938
QTest::newRow("data0") << false << QDate(1999, 1, 1) << QDate(1999, 1, 31) << (uint)QDateTimeEdit::DaySection
1939
<< QDate(1999, 1, 1);
1940
QTest::newRow("data1") << true << QDate(1999, 1, 1) << QDate(1999, 1, 31) << (uint)QDateTimeEdit::DaySection
1941
<< QDate(1999, 1, 31);
1942
QTest::newRow("data2") << false << QDate(1999, 1, 1) << QDate(1999, 1, 31) << (uint)QDateTimeEdit::MonthSection
1943
<< QDate(1999, 1, 31);
1944
QTest::newRow("data3") << true << QDate(1999, 1, 1) << QDate(1999, 1, 31) << (uint)QDateTimeEdit::MonthSection
1945
<< QDate(1999, 1, 1);
1946
QTest::newRow("data4") << false << QDate(1999, 1, 1) << QDate(1999, 1, 31) << (uint)QDateTimeEdit::YearSection
1947
<< QDate(1999, 1, 31);
1948
QTest::newRow("data5") << true << QDate(1999, 1, 1) << QDate(1999, 1, 31) << (uint)QDateTimeEdit::YearSection
1949
<< QDate(1999, 1, 1);
1950
QTest::newRow("data6") << false << QDate(1999, 1, 1) << QDate(2000, 1, 31) << (uint)QDateTimeEdit::DaySection
1951
<< QDate(2000, 1, 1);
1952
QTest::newRow("data7") << true << QDate(1999, 1, 1) << QDate(2000, 1, 31) << (uint)QDateTimeEdit::DaySection
1953
<< QDate(1999, 1, 31);
1954
QTest::newRow("data8") << false << QDate(1999, 1, 1) << QDate(2000, 1, 31) << (uint)QDateTimeEdit::MonthSection
1955
<< QDate(2000, 1, 31);
1956
QTest::newRow("data9") << true << QDate(1999, 1, 1) << QDate(2000, 1, 31) << (uint)QDateTimeEdit::MonthSection
1957
<< QDate(1999, 12, 1);
1958
QTest::newRow("data10") << false << QDate(1999, 1, 1) << QDate(2000, 1, 31) << (uint)QDateTimeEdit::YearSection
1959
<< QDate(1999, 1, 31);
1960
QTest::newRow("data11") << true << QDate(1999, 1, 1) << QDate(2000, 1, 31) << (uint)QDateTimeEdit::YearSection
1961
<< QDate(2000, 1, 1);
1964
void tst_QDateTimeEdit::wrappingDate()
1966
QFETCH(bool, startWithMin);
1967
QFETCH(QDate, minimumDate);
1968
QFETCH(QDate, maximumDate);
1969
QFETCH(uint, section);
1970
QFETCH(QDate, newDate);
1972
testWidget->setDisplayFormat("dd/MM/yyyy");
1973
testWidget->setMinimumDate(minimumDate);
1974
testWidget->setMaximumDate(maximumDate);
1975
testWidget->setWrapping(true);
1976
testWidget->setCurrentSection((QDateTimeEdit::Section)section);
1979
testWidget->setDate(minimumDate);
1980
QTest::keyClick(testWidget, Qt::Key_Down);
1982
testWidget->setDate(maximumDate);
1983
QTest::keyClick(testWidget, Qt::Key_Up);
1985
if (testWidget->currentSection() == QDateTimeEdit::MonthSection)
1986
QCOMPARE(testWidget->date(), newDate);
1989
void tst_QDateTimeEdit::dateSignalChecking_data()
1991
QTest::addColumn<QDate>("originalDate");
1992
QTest::addColumn<QDate>("newDate");
1993
QTest::addColumn<int>("timesEmitted");
1995
QTest::newRow("data0") << QDate(2004, 06, 22) << QDate(2004, 07, 23) << 1;
1996
QTest::newRow("data1") << QDate(2004, 06, 22) << QDate(2004, 06, 22) << 0;
1999
void tst_QDateTimeEdit::dateSignalChecking()
2001
QFETCH(QDate, originalDate);
2002
QFETCH(QDate, newDate);
2003
QFETCH(int, timesEmitted);
2005
testWidget->setDate(originalDate);
2007
QSignalSpy dateSpy(testWidget, SIGNAL(dateChanged(QDate)));
2008
QSignalSpy dateTimeSpy(testWidget, SIGNAL(dateTimeChanged(QDateTime)));
2009
QSignalSpy timeSpy(testWidget, SIGNAL(timeChanged(QTime)));
2011
testWidget->setDate(newDate);
2012
QCOMPARE(dateSpy.count(), timesEmitted);
2014
if (timesEmitted > 0) {
2015
QList<QVariant> list = dateSpy.takeFirst();
2017
d = qvariant_cast<QDate>(list.at(0));
2018
QCOMPARE(d, newDate);
2020
QCOMPARE(dateTimeSpy.count(), timesEmitted);
2021
QCOMPARE(timeSpy.count(), 0);
2024
void tst_QDateTimeEdit::timeSignalChecking_data()
2026
QTest::addColumn<QTime>("originalTime");
2027
QTest::addColumn<QTime>("newTime");
2028
QTest::addColumn<int>("timesEmitted");
2030
QTest::newRow("data0") << QTime(15, 55, 00) << QTime(15, 17, 12) << 1;
2031
QTest::newRow("data1") << QTime(15, 55, 00) << QTime(15, 55, 00) << 0;
2034
void tst_QDateTimeEdit::timeSignalChecking()
2036
QFETCH(QTime, originalTime);
2037
QFETCH(QTime, newTime);
2038
QFETCH(int, timesEmitted);
2040
testWidget->setTime(originalTime);
2042
testWidget->setDisplayFormat("hh:mm:ss");
2043
QSignalSpy dateSpy(testWidget, SIGNAL(dateChanged(QDate)));
2044
QSignalSpy dateTimeSpy(testWidget, SIGNAL(dateTimeChanged(QDateTime)));
2045
QSignalSpy timeSpy(testWidget, SIGNAL(timeChanged(QTime)));
2047
testWidget->setTime(newTime);
2048
QCOMPARE(timeSpy.count(), timesEmitted);
2050
if (timesEmitted > 0) {
2051
QList<QVariant> list = timeSpy.takeFirst();
2053
t = qvariant_cast<QTime>(list.at(0));
2054
QCOMPARE(t, newTime);
2056
QCOMPARE(dateTimeSpy.count(), timesEmitted);
2057
QCOMPARE(dateSpy.count(), 0);
2060
void tst_QDateTimeEdit::dateTimeSignalChecking_data()
2062
QTest::addColumn<QDateTime>("originalDateTime");
2063
QTest::addColumn<QDateTime>("newDateTime");
2064
QTest::addColumn<int>("timesDateEmitted");
2065
QTest::addColumn<int>("timesTimeEmitted");
2066
QTest::addColumn<int>("timesDateTimeEmitted");
2068
QTest::newRow("data0") << QDateTime(QDate(2004, 6, 22), QTime(15, 55, 0))
2069
<< QDateTime(QDate(2004, 7, 23), QTime(15, 17, 12))
2071
QTest::newRow("data1") << QDateTime(QDate(2004, 6, 22), QTime(15, 55, 0))
2072
<< QDateTime(QDate(2004, 6, 22), QTime(15, 17, 12))
2074
QTest::newRow("data2") << QDateTime(QDate(2004, 6, 22), QTime(15, 55, 0))
2075
<< QDateTime(QDate(2004, 7, 23), QTime(15, 55, 0))
2077
QTest::newRow("data3") << QDateTime(QDate(2004, 6, 22), QTime(15, 55, 0))
2078
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 0))
2082
void tst_QDateTimeEdit::dateTimeSignalChecking()
2084
QFETCH(QDateTime, originalDateTime);
2085
QFETCH(QDateTime, newDateTime);
2086
QFETCH(int, timesDateEmitted);
2087
QFETCH(int, timesTimeEmitted);
2088
QFETCH(int, timesDateTimeEmitted);
2090
testWidget->setDisplayFormat("dd/MM/yyyy hh:mm:ss");
2091
testWidget->setDateTime(originalDateTime);
2093
QSignalSpy dateSpy(testWidget, SIGNAL(dateChanged(QDate)));
2094
QSignalSpy timeSpy(testWidget, SIGNAL(timeChanged(QTime)));
2095
QSignalSpy dateTimeSpy(testWidget, SIGNAL(dateTimeChanged(QDateTime)));
2097
testWidget->setDateTime(newDateTime);
2098
QCOMPARE(dateSpy.count(), timesDateEmitted);
2099
if (timesDateEmitted > 0) {
2100
QCOMPARE(timesDateEmitted, 1);
2101
QList<QVariant> list = dateSpy.takeFirst();
2103
d = qvariant_cast<QDate>(list.at(0));
2104
QCOMPARE(d, newDateTime.date());
2106
QCOMPARE(timeSpy.count(), timesTimeEmitted);
2107
if (timesTimeEmitted > 0) {
2108
QList<QVariant> list = timeSpy.takeFirst();
2110
t = qvariant_cast<QTime>(list.at(0));
2111
QCOMPARE(t, newDateTime.time());
2113
QCOMPARE(dateTimeSpy.count(), timesDateTimeEmitted);
2114
if (timesDateTimeEmitted > 0) {
2115
QList<QVariant> list = dateTimeSpy.takeFirst();
2117
dt = qvariant_cast<QDateTime>(list.at(0));
2118
QCOMPARE(dt, newDateTime);
2122
void tst_QDateTimeEdit::sectionText_data()
2124
QTest::addColumn<QString>("format");
2125
QTest::addColumn<QDateTime>("dateTime");
2126
QTest::addColumn<uint>("section");
2127
QTest::addColumn<QString>("sectionText");
2129
QTest::newRow("data0") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2130
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2131
<< (uint)QDateTimeEdit::NoSection << QString();
2132
QTest::newRow("data1") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2133
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2134
<< (uint)QDateTimeEdit::AmPmSection << QString("pm");
2135
QTest::newRow("data2") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2136
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2137
<< (uint)QDateTimeEdit::MSecSection << QString("789");
2138
QTest::newRow("data3") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2139
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2140
<< (uint)QDateTimeEdit::SecondSection << QString("03");
2141
QTest::newRow("data4") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2142
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2143
<< (uint)QDateTimeEdit::MinuteSection << QString("55");
2144
QTest::newRow("data5") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2145
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2146
<< (uint)QDateTimeEdit::HourSection << QString("03");
2147
QTest::newRow("data6") << QString("dd/MM/yyyy hh:mm:ss zzz")
2148
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2149
<< (uint)QDateTimeEdit::HourSection << QString("15");
2150
QTest::newRow("data7") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2151
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2152
<< (uint)QDateTimeEdit::DaySection << QString("22");
2153
QTest::newRow("data8") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2154
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2155
<< (uint)QDateTimeEdit::MonthSection << QString("06");
2156
QTest::newRow("data9") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2157
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2158
<< (uint)QDateTimeEdit::YearSection << QString("2004");
2159
QTest::newRow("data10") << QString("dd/MM/yyyy hh:mm:ss zzz AP")
2160
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2161
<< (uint)QDateTimeEdit::AmPmSection << QString("PM");
2162
QTest::newRow("data11") << QString("dd/MM/yyyy hh:mm:ss ap")
2163
<< QDateTime(QDate(2004, 6, 22), QTime(15, 55, 3, 789))
2164
<< (uint)QDateTimeEdit::MSecSection << QString();
2167
void tst_QDateTimeEdit::sectionText()
2169
QFETCH(QString, format);
2170
QFETCH(QDateTime, dateTime);
2171
QFETCH(uint, section);
2172
QFETCH(QString, sectionText);
2174
testWidget->setDisplayFormat(format);
2175
testWidget->setDateTime(dateTime);
2176
QCOMPARE(testWidget->sectionText((QDateTimeEdit::Section)section), sectionText);
2177
// QApplication::setLayoutDirection(Qt::RightToLeft);
2178
// testWidget->setDisplayFormat(format);
2179
// QCOMPARE(format, testWidget->displayFormat());
2180
// testWidget->setDateTime(dateTime);
2181
// QCOMPARE(testWidget->sectionText((QDateTimeEdit::Section)section), sectionText);
2182
// QApplication::setLayoutDirection(Qt::LeftToRight);
2185
void tst_QDateTimeEdit::mousePress()
2187
testWidget->setDate(QDate(2004, 6, 23));
2188
testWidget->setCurrentSection(QDateTimeEdit::YearSection);
2189
QCOMPARE(testWidget->currentSection(), QDateTimeEdit::YearSection);
2191
// Ask the SC_SpinBoxUp button location from style
2192
QStyleOptionSpinBox so;
2193
so.rect = testWidget->rect();
2194
QRect rectUp = testWidget->style()->subControlRect(QStyle::CC_SpinBox, &so, QStyle::SC_SpinBoxUp, testWidget);
2196
// Send mouseClick to center of SC_SpinBoxUp
2197
QTest::mouseClick(testWidget, Qt::LeftButton, 0, rectUp.center());
2198
QCOMPARE(testWidget->date().year(), 2005);
2201
void tst_QDateTimeEdit::stepHourAMPM_data()
2203
QTest::addColumn<QString>("format");
2204
QTest::addColumn<KeyList>("keys");
2205
QTest::addColumn<TimeList>("expected");
2206
QTest::addColumn<QTime>("start");
2207
QTest::addColumn<QTime>("min");
2208
QTest::addColumn<QTime>("max");
2214
expected << QTime(1, 0, 0);
2216
expected << QTime(2, 0, 0);
2218
expected << QTime(3, 0, 0);
2220
expected << QTime(4, 0, 0);
2222
expected << QTime(5, 0, 0);
2224
expected << QTime(6, 0, 0);
2226
expected << QTime(7, 0, 0);
2228
expected << QTime(8, 0, 0);
2230
expected << QTime(9, 0, 0);
2232
expected << QTime(10, 0, 0);
2234
expected << QTime(11, 0, 0);
2236
expected << QTime(12, 0, 0);
2238
expected << QTime(13, 0, 0);
2240
expected << QTime(14, 0, 0);
2242
expected << QTime(15, 0, 0);
2244
expected << QTime(16, 0, 0);
2246
expected << QTime(17, 0, 0);
2248
expected << QTime(18, 0, 0);
2250
expected << QTime(19, 0, 0);
2252
expected << QTime(20, 0, 0);
2254
expected << QTime(21, 0, 0);
2256
expected << QTime(22, 0, 0);
2258
expected << QTime(23, 0, 0);
2259
keys << Qt::Key_Down;
2260
expected << QTime(22, 0, 0);
2261
keys << Qt::Key_Down;
2262
expected << QTime(21, 0, 0);
2263
keys << Qt::Key_Down;
2264
expected << QTime(20, 0, 0);
2265
keys << Qt::Key_Down;
2266
expected << QTime(19, 0, 0);
2267
keys << Qt::Key_Down;
2268
expected << QTime(18, 0, 0);
2269
keys << Qt::Key_Down;
2270
expected << QTime(17, 0, 0);
2271
keys << Qt::Key_Down;
2272
expected << QTime(16, 0, 0);
2273
keys << Qt::Key_Down;
2274
expected << QTime(15, 0, 0);
2275
keys << Qt::Key_Down;
2276
expected << QTime(14, 0, 0);
2277
keys << Qt::Key_Down;
2278
expected << QTime(13, 0, 0);
2279
keys << Qt::Key_Down;
2280
expected << QTime(12, 0, 0);
2281
keys << Qt::Key_Down;
2282
expected << QTime(11, 0, 0);
2283
keys << Qt::Key_Down;
2284
expected << QTime(10, 0, 0);
2285
keys << Qt::Key_Down;
2286
expected << QTime(9, 0, 0);
2287
keys << Qt::Key_Down;
2288
expected << QTime(8, 0, 0);
2289
keys << Qt::Key_Down;
2290
expected << QTime(7, 0, 0);
2291
keys << Qt::Key_Down;
2292
expected << QTime(6, 0, 0);
2293
keys << Qt::Key_Down;
2294
expected << QTime(5, 0, 0);
2295
keys << Qt::Key_Down;
2296
expected << QTime(4, 0, 0);
2297
keys << Qt::Key_Down;
2298
expected << QTime(3, 0, 0);
2299
keys << Qt::Key_Down;
2300
expected << QTime(2, 0, 0);
2301
keys << Qt::Key_Down;
2302
expected << QTime(1, 0, 0);
2303
keys << Qt::Key_Down;
2304
expected << QTime(0, 0, 0);
2306
QTest::newRow("hh 1") << QString("hh") << keys << expected << QTime(0, 0)
2307
<< QTime(0, 0) << QTime(23, 59, 59);
2308
QTest::newRow("hh:ap 1") << QString("hh:ap") << keys << expected
2309
<< QTime(0, 0) << QTime(0, 0)
2310
<< QTime(23, 59, 59);
2312
QTest::newRow("HH:ap 2") << QString("HH:ap") << keys << expected
2313
<< QTime(0, 0) << QTime(0, 0)
2314
<< QTime(23, 59, 59);
2319
keys << Qt::Key_Down;
2320
expected << QTime(2, 0, 0);
2321
QTest::newRow("hh 2") << QString("hh") << keys << expected << QTime(0, 0) << QTime(2, 0, 0) << QTime(23, 59, 59);
2322
QTest::newRow("hh:ap 2") << QString("hh:ap") << keys << expected << QTime(0, 0) << QTime(2, 0, 0) << QTime(23, 59, 59);
2328
expected << QTime(23, 0, 0);
2330
expected << QTime(23, 0, 0);
2331
QTest::newRow("hh 3") << QString("hh") << keys << expected << QTime(0, 0) << QTime(22, 0, 0)
2332
<< QTime(23, 59, 59);
2333
QTest::newRow("hh:ap 3") << QString("hh:ap") << keys << expected << QTime(0, 0)
2334
<< QTime(22, 0, 0) << QTime(23, 59, 59);
2340
expected << QTime(15, 31, 0);
2341
QTest::newRow("hh:mm:ap 3") << QString("hh:mm:ap") << keys << expected << QTime(15, 31, 0)
2342
<< QTime(9, 0, 0) << QTime(16, 0, 0);
2343
QTest::newRow("hh:mm 3") << QString("hh:mm") << keys << expected << QTime(15, 31, 0)
2344
<< QTime(9, 0, 0) << QTime(16, 0, 0);
2348
void tst_QDateTimeEdit::stepHourAMPM()
2350
QFETCH(QString, format);
2351
QFETCH(KeyList, keys);
2352
QFETCH(TimeList, expected);
2353
QFETCH(QTime, start);
2357
testWidget->setDisplayFormat(format);
2358
testWidget->setTime(start);
2359
testWidget->setMinimumTime(min);
2360
testWidget->setMaximumTime(max);
2361
if (keys.size() != expected.size()) {
2362
qWarning("%s:%d Test broken", __FILE__, __LINE__);
2363
QCOMPARE(keys.size(), expected.size());
2366
for (int i=0; i<keys.size(); ++i) {
2367
QTest::keyClick(testWidget, keys.at(i));
2368
QCOMPARE(testWidget->time(), expected.at(i));
2372
void tst_QDateTimeEdit::displayedSections_data()
2374
QTest::addColumn<QString>("format");
2375
QTest::addColumn<uint>("section");
2377
QTest::newRow("data0") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2378
<< (uint)(QDateTimeEdit::DaySection | QDateTimeEdit::MonthSection
2379
| QDateTimeEdit::YearSection | QDateTimeEdit::HourSection
2380
| QDateTimeEdit::MinuteSection | QDateTimeEdit::SecondSection
2381
| QDateTimeEdit::MSecSection | QDateTimeEdit::AmPmSection);
2382
QTest::newRow("data1") << QString("dd/yyyy hh:mm:ss zzz ap")
2383
<< (uint)(QDateTimeEdit::DaySection
2384
| QDateTimeEdit::YearSection | QDateTimeEdit::HourSection
2385
| QDateTimeEdit::MinuteSection | QDateTimeEdit::SecondSection
2386
| QDateTimeEdit::MSecSection | QDateTimeEdit::AmPmSection);
2387
QTest::newRow("data2") << QString("dd/MM/yyyy mm zzz ap")
2388
<< (uint)(QDateTimeEdit::DaySection | QDateTimeEdit::MonthSection
2389
| QDateTimeEdit::YearSection
2390
| QDateTimeEdit::MinuteSection
2391
| QDateTimeEdit::MSecSection | QDateTimeEdit::AmPmSection);
2392
QTest::newRow("data3") << QString("dd/MM/yyyy")
2393
<< (uint)(QDateTimeEdit::DaySection | QDateTimeEdit::MonthSection
2394
| QDateTimeEdit::YearSection);
2395
QTest::newRow("data4") << QString("hh:mm:ss zzz ap")
2396
<< (uint)(QDateTimeEdit::HourSection
2397
| QDateTimeEdit::MinuteSection | QDateTimeEdit::SecondSection
2398
| QDateTimeEdit::MSecSection | QDateTimeEdit::AmPmSection);
2399
QTest::newRow("data5") << QString("dd ap")
2400
<< (uint)(QDateTimeEdit::DaySection | QDateTimeEdit::AmPmSection);
2401
QTest::newRow("data6") << QString("zzz")
2402
<< (uint)QDateTimeEdit::MSecSection;
2405
void tst_QDateTimeEdit::displayedSections()
2407
QFETCH(QString, format);
2408
QFETCH(uint, section);
2410
testWidget->setDisplayFormat(format);
2411
QCOMPARE(QDateTimeEdit::Sections(section), testWidget->displayedSections());
2414
void tst_QDateTimeEdit::currentSection_data()
2416
QTest::addColumn<QString>("format");
2417
QTest::addColumn<uint>("section");
2418
QTest::addColumn<uint>("currentSection");
2420
// First is deliberate, this way we can make sure that it is not reset by specifying no section.
2421
QTest::newRow("data0") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2422
<< (uint)QDateTimeEdit::NoSection << (uint)QDateTimeEdit::YearSection;
2423
QTest::newRow("data1") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2424
<< (uint)QDateTimeEdit::AmPmSection << (uint)QDateTimeEdit::AmPmSection;
2425
QTest::newRow("data2") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2426
<< (uint)QDateTimeEdit::MSecSection << (uint)QDateTimeEdit::MSecSection;
2427
QTest::newRow("data3") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2428
<< (uint)QDateTimeEdit::SecondSection << (uint)QDateTimeEdit::SecondSection;
2429
QTest::newRow("data4") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2430
<< (uint)QDateTimeEdit::MinuteSection << (uint)QDateTimeEdit::MinuteSection;
2431
QTest::newRow("data5") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2432
<< (uint)QDateTimeEdit::HourSection << (uint)QDateTimeEdit::HourSection;
2433
QTest::newRow("data6") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2434
<< (uint)QDateTimeEdit::DaySection << (uint)QDateTimeEdit::DaySection;
2435
QTest::newRow("data7") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2436
<< (uint)QDateTimeEdit::MonthSection << (uint)QDateTimeEdit::MonthSection;
2437
QTest::newRow("data8") << QString("dd/MM/yyyy hh:mm:ss zzz ap")
2438
<< (uint)QDateTimeEdit::YearSection << (uint)QDateTimeEdit::YearSection;
2439
QTest::newRow("data9") << QString("dd/MM/yyyy hh:mm:ss zzz AP")
2440
<< (uint)QDateTimeEdit::AmPmSection << (uint)QDateTimeEdit::AmPmSection;
2441
QTest::newRow("data10") << QString("dd/MM/yyyy hh:mm:ss ap")
2442
<< (uint)QDateTimeEdit::MSecSection << (uint)QDateTimeEdit::DaySection;
2445
void tst_QDateTimeEdit::currentSection()
2447
QFETCH(QString, format);
2448
QFETCH(uint, section);
2449
QFETCH(uint, currentSection);
2451
testWidget->setDisplayFormat(format);
2452
if ((QDateTimeEdit::Section)section == QDateTimeEdit::NoSection)
2453
testWidget->setCurrentSection(QDateTimeEdit::YearSection); // Ensure it's not reset (see above)
2454
testWidget->setCurrentSection((QDateTimeEdit::Section)section);
2455
QCOMPARE((QDateTimeEdit::Section)currentSection, testWidget->currentSection());
2458
void tst_QDateTimeEdit::readOnly()
2461
QDateTimeEdit dt(QDate(2000, 2, 1));
2462
dt.setDisplayFormat("yyyy.MM.dd");
2464
dt.setCurrentSection(QDateTimeEdit::DaySection);
2465
QTest::keyClick(&dt, Qt::Key_Up);
2466
QCOMPARE(dt.date(), QDate(2000, 2, 2));
2467
dt.setReadOnly(true);
2468
QTest::keyClick(&dt, Qt::Key_Up);
2469
QCOMPARE(dt.date(), QDate(2000, 2, 2));
2470
dt.stepBy(1); // stepBy should still work
2471
QCOMPARE(dt.date(), QDate(2000, 2, 3));
2472
dt.setReadOnly(false);
2473
QTest::keyClick(&dt, Qt::Key_Up);
2474
QCOMPARE(dt.date(), QDate(2000, 2, 4));
2477
void tst_QDateTimeEdit::weirdCase()
2479
testWidget->lineEdit()->setCursorPosition(0);
2480
testWidget->setDateRange(QDate(2005, 1, 1), QDate(2010, 12, 31));
2481
testWidget->setDisplayFormat("dd//MM//yyyy");
2482
testWidget->setDate(testWidget->minimumDate());
2483
QTest::keyClick(testWidget, Qt::Key_Left);
2484
QVERIFY(!testWidget->lineEdit()->hasSelectedText());
2485
QCOMPARE(testWidget->lineEdit()->cursorPosition(), 0);
2486
QTest::keyClick(testWidget, Qt::Key_Right);
2487
QTest::keyClick(testWidget, Qt::Key_Right);
2488
QTest::keyClick(testWidget, Qt::Key_Right);
2489
QTest::keyClick(testWidget, Qt::Key_Right);
2490
QTest::keyClick(testWidget, Qt::Key_Right);
2491
QTest::keyClick(testWidget, Qt::Key_Right);
2492
QVERIFY(!testWidget->lineEdit()->hasSelectedText());
2493
QCOMPARE(testWidget->lineEdit()->cursorPosition(), 8);
2495
QTest::keyClick(testWidget, Qt::Key_Delete);
2496
QCOMPARE(testWidget->text(), QString("01//01//005"));
2497
QTest::keyClick(testWidget, Qt::Key_4);
2498
QCOMPARE(testWidget->text(), QString("01//01//005"));
2501
void tst_QDateTimeEdit::newCase()
2503
if (QDate::shortMonthName(6) != "Jun" || QDate::shortMonthName(7) != "Jul" ||
2504
QDate::longMonthName(6) != "June" || QDate::longMonthName(7) != "July")
2505
QSKIP("This test only works in English");
2507
testWidget->setDisplayFormat("MMMM'a'MbMMMcMM");
2508
testWidget->setDate(QDate(2005, 6, 1));
2509
QCOMPARE(testWidget->text(), QString("Junea6bJunc06"));
2511
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
2513
QTest::keyClick(testWidget, Qt::Key_Home);
2515
QTest::keyClick(testWidget, Qt::Key_Up);
2516
QCOMPARE(testWidget->text(), QString("Julya7bJulc07"));
2517
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("July"));
2519
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
2521
QTest::keyClick(testWidget, Qt::Key_Home);
2524
QEXPECT_FAIL("", "QTBUG-23674", Abort);
2526
QCOMPARE(testWidget->lineEdit()->selectedText(), QString());
2527
QTest::keyClick(testWidget, Qt::Key_Right);
2528
QTest::keyClick(testWidget, Qt::Key_Right);
2529
QTest::keyClick(testWidget, Qt::Key_Right);
2530
QTest::keyClick(testWidget, Qt::Key_Delete);
2531
QTest::keyClick(testWidget, Qt::Key_Left);
2533
QCOMPARE(testWidget->text(), QString("Jula7bJulc07"));
2534
QTest::keyClick(testWidget, Qt::Key_Delete);
2535
QCOMPARE(testWidget->text(), QString("Jua7bJulc07"));
2536
QTest::keyClick(testWidget, Qt::Key_N);
2537
QCOMPARE(testWidget->text(), QString("Juna7bJulc07"));
2538
QTest::keyClick(testWidget, Qt::Key_E);
2539
QCOMPARE(testWidget->text(), QString("Junea6bJunc06"));
2542
void tst_QDateTimeEdit::newCase2()
2544
testWidget->setDisplayFormat("MMMM yyyy-MM-dd MMMM");
2545
testWidget->setDate(QDate(2005, 8, 8));
2546
QTest::keyClick(testWidget, Qt::Key_Return);
2547
QTest::keyClick(testWidget, Qt::Key_Backspace);
2548
QCOMPARE(testWidget->text(), QString(" 2005-08-08 ") + QDate::longMonthName(8));
2551
void tst_QDateTimeEdit::newCase3()
2553
if (!QDate::longMonthName(1).startsWith("Januar"))
2554
QSKIP("This test does not work in this locale");
2556
testWidget->setDisplayFormat("dd MMMM yyyy");
2557
testWidget->setDate(QDate(2000, 1, 1));
2558
testWidget->setGeometry(QRect(QPoint(0, 0), testWidget->sizeHint()));
2559
testWidget->setCurrentSection(QDateTimeEdit::MonthSection);
2560
QTest::keyClick(testWidget, Qt::Key_Return);
2561
QTest::keyClick(testWidget, Qt::Key_J);
2562
QCOMPARE(testWidget->lineEdit()->displayText(), QString("01 J 2000"));
2563
QCOMPARE(testWidget->lineEdit()->cursorPosition(), 4);
2564
QTest::keyClick(testWidget, Qt::Key_A);
2565
QTest::keyClick(testWidget, Qt::Key_N);
2566
QTest::keyClick(testWidget, Qt::Key_U);
2567
QTest::keyClick(testWidget, Qt::Key_A);
2568
QTest::keyClick(testWidget, Qt::Key_R);
2571
void tst_QDateTimeEdit::cursorPos()
2573
if (QDate::longMonthName(1) != "January")
2574
QSKIP("This test only works in English");
2576
testWidget->setDisplayFormat("dd MMMM yyyy");
2577
//testWidget->setGeometry(0, 0, 200, 200);
2578
testWidget->setCurrentSection(QDateTimeEdit::MonthSection);
2579
QTest::keyClick(testWidget, Qt::Key_Return);
2580
QCOMPARE(testWidget->lineEdit()->cursorPosition(), 10);
2581
QTest::keyClick(testWidget, Qt::Key_J);
2582
QTest::keyClick(testWidget, Qt::Key_A);
2583
QTest::keyClick(testWidget, Qt::Key_N);
2584
QTest::keyClick(testWidget, Qt::Key_U);
2585
QTest::keyClick(testWidget, Qt::Key_A);
2586
QTest::keyClick(testWidget, Qt::Key_R);
2587
//QCursor::setPos(20, 20);
2590
QTest::keyClick(testWidget, Qt::Key_Y);
2591
QCOMPARE(testWidget->lineEdit()->cursorPosition(), 11);
2593
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
2595
QTest::keyClick(testWidget, Qt::Key_Home);
2597
QTest::keyClick(testWidget, Qt::Key_Return);
2598
QTest::keyClick(testWidget, Qt::Key_3);
2599
QTest::keyClick(testWidget, Qt::Key_1);
2601
QEXPECT_FAIL("", "QTBUG-23674", Abort);
2603
QCOMPARE(testWidget->lineEdit()->cursorPosition(), 3);
2606
void tst_QDateTimeEdit::newCase4()
2608
testWidget->setDisplayFormat("hh:mm");
2609
testWidget->setMinimumTime(QTime(3, 3, 0));
2610
QTest::keyClick(testWidget, Qt::Key_Return);
2611
QTest::keyClick(testWidget, Qt::Key_0);
2612
QCOMPARE(testWidget->lineEdit()->displayText(), QString("0:03"));
2613
QTest::keyClick(testWidget, Qt::Key_2);
2614
QCOMPARE(testWidget->lineEdit()->displayText(), QString("0:03"));
2615
QTest::keyClick(testWidget, Qt::Key_4);
2616
QCOMPARE(testWidget->lineEdit()->displayText(), QString("04:03"));
2619
void tst_QDateTimeEdit::newCase5()
2621
testWidget->setDisplayFormat("yyyy-MM-dd hh:mm:ss zzz 'ms'");
2622
testWidget->setDateTime(QDateTime(QDate(2005, 10, 7), QTime(17, 44, 13, 100)));
2624
QCOMPARE(testWidget->lineEdit()->displayText(), QString("2005-10-07 17:44:13 100 ms"));
2626
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
2628
QTest::keyClick(testWidget, Qt::Key_End);
2630
QTest::keyClick(testWidget, Qt::Key_Backtab, Qt::ShiftModifier);
2632
QTest::keyClick(testWidget, Qt::Key_Return);
2633
QTest::keyClick(testWidget, Qt::Key_1);
2634
QTest::keyClick(testWidget, Qt::Key_2);
2635
QTest::keyClick(testWidget, Qt::Key_4);
2637
QEXPECT_FAIL("", "QTBUG-23674", Abort);
2639
QCOMPARE(testWidget->lineEdit()->displayText(), QString("2005-10-07 17:44:13 124 ms"));
2641
QTest::keyClick(testWidget, Qt::Key_Backspace);
2642
QCOMPARE(testWidget->lineEdit()->displayText(), QString("2005-10-07 17:44:13 12 ms"));
2645
void tst_QDateTimeEdit::newCase6()
2647
testWidget->setDisplayFormat("d-yyyy-MM-dd");
2648
testWidget->setDate(QDate(2005, 10, 7));
2650
QCOMPARE(testWidget->lineEdit()->displayText(), QString("7-2005-10-07"));
2652
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
2654
QTest::keyClick(testWidget, Qt::Key_Home);
2656
QTest::keyClick(testWidget, Qt::Key_Return);
2657
QTest::keyClick(testWidget, Qt::Key_1);
2658
QTest::keyClick(testWidget, Qt::Key_2);
2659
QCOMPARE(testWidget->lineEdit()->displayText(), QString("12-2005-10-12"));
2662
void tst_QDateTimeEdit::task98554()
2664
testWidget->setDisplayFormat("mm.ss.zzz(ms)");
2665
testWidget->setTime(QTime(0, 0, 9));
2666
testWidget->setCurrentSection(QDateTimeEdit::SecondSection);
2668
QCOMPARE(testWidget->lineEdit()->displayText(), QString("00.09.000(09)"));
2669
QCOMPARE(testWidget->time(), QTime(0, 0, 9, 0));
2670
QTest::keyClick(testWidget, Qt::Key_Up);
2671
QCOMPARE(testWidget->lineEdit()->displayText(), QString("00.10.000(010)"));
2672
QCOMPARE(testWidget->time(), QTime(0, 0, 10, 0));
2675
static QList<int> makeList(int val1, int val2, int val3)
2678
ret << val1 << val2 << val3;
2682
void tst_QDateTimeEdit::setCurrentSection_data()
2684
QTest::addColumn<QString>("format");
2685
QTest::addColumn<QDateTime>("dateTime");
2686
QTest::addColumn<QList<int> >("setCurrentSections");
2687
QTest::addColumn<QList<int> >("expectedCursorPositions");
2689
QTest::newRow("Day") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2690
<< makeList(QDateTimeEdit::DaySection, QDateTimeEdit::DaySection, QDateTimeEdit::DaySection)
2691
<< makeList(24, 0, 24);
2692
QTest::newRow("Month") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2693
<< makeList(QDateTimeEdit::MonthSection, QDateTimeEdit::MonthSection, QDateTimeEdit::MonthSection)
2694
<< makeList(3, 26, 3);
2695
QTest::newRow("Year") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2696
<< makeList(QDateTimeEdit::YearSection, QDateTimeEdit::YearSection, QDateTimeEdit::YearSection)
2697
<< makeList(6, 28, 6);
2698
QTest::newRow("Hour") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2699
<< makeList(QDateTimeEdit::HourSection, QDateTimeEdit::HourSection, QDateTimeEdit::HourSection)
2700
<< makeList(11, 31, 11);
2701
QTest::newRow("Minute") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2702
<< makeList(QDateTimeEdit::MinuteSection, QDateTimeEdit::MinuteSection, QDateTimeEdit::MinuteSection)
2703
<< makeList(14, 33, 14);
2704
QTest::newRow("Second") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2705
<< makeList(QDateTimeEdit::SecondSection, QDateTimeEdit::SecondSection, QDateTimeEdit::SecondSection)
2706
<< makeList(17, 35, 17);
2707
QTest::newRow("MSec") << QString("dd/MM/yyyy hh:mm:ss.zzz d/M/yy h:m:s.z") << QDateTime(QDate(2001, 1, 1), QTime(1, 2, 3, 4))
2708
<< makeList(QDateTimeEdit::MSecSection, QDateTimeEdit::MSecSection, QDateTimeEdit::MSecSection)
2709
<< makeList(20, 37, 20);
2712
void tst_QDateTimeEdit::setCurrentSection()
2714
QFETCH(QString, format);
2715
QFETCH(QDateTime, dateTime);
2716
QFETCH(QList<int>, setCurrentSections);
2717
QFETCH(QList<int>, expectedCursorPositions);
2719
QCOMPARE(setCurrentSections.size(), expectedCursorPositions.size());
2720
testWidget->setDisplayFormat(format);
2721
testWidget->setDateTime(dateTime);
2723
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
2725
QTest::keyClick(testWidget, Qt::Key_Home);
2728
testWidget->resize(400, 100);
2729
for (int i=0; i<setCurrentSections.size(); ++i) {
2730
testWidget->setCurrentSection((QDateTimeEdit::Section)setCurrentSections.at(i));
2731
QCOMPARE(testWidget->currentSection(), (QDateTimeEdit::Section)setCurrentSections.at(i));
2732
QCOMPARE(testWidget->lineEdit()->cursorPosition(), expectedCursorPositions.at(i));
2736
void tst_QDateTimeEdit::setSelectedSection()
2738
testWidget->setDisplayFormat("mm.ss.zzz('ms') m");
2739
testWidget->setTime(QTime(0, 0, 9));
2742
QTest::keyClick(testWidget, Qt::Key_Left, Qt::ControlModifier);
2744
QTest::keyClick(testWidget, Qt::Key_Home);
2747
QEXPECT_FAIL("", "QTBUG-23674", Abort);
2749
QVERIFY(!testWidget->lineEdit()->hasSelectedText());
2750
testWidget->setSelectedSection(QDateTimeEdit::MinuteSection);
2751
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("00"));
2752
testWidget->setCurrentSection(QDateTimeEdit::MinuteSection);
2753
testWidget->setSelectedSection(QDateTimeEdit::MinuteSection);
2754
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("0"));
2755
testWidget->setSelectedSection(QDateTimeEdit::SecondSection);
2756
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("09"));
2757
testWidget->setSelectedSection(QDateTimeEdit::NoSection);
2758
QVERIFY(!testWidget->lineEdit()->hasSelectedText());
2761
void tst_QDateTimeEdit::calendarPopup()
2765
QVERIFY(!edit.calendarWidget());
2766
edit.setCalendarPopup(true);
2767
QVERIFY(edit.calendarWidget());
2772
QVERIFY(!edit.calendarWidget());
2773
edit.setCalendarPopup(true);
2774
QVERIFY(!edit.calendarWidget());
2779
QVERIFY(!edit.calendarWidget());
2780
QCalendarWidget *cw = new QCalendarWidget;
2781
edit.setCalendarWidget(cw);
2782
QVERIFY(!edit.calendarWidget());
2783
edit.setCalendarPopup(true);
2784
edit.setCalendarWidget(cw);
2785
QCOMPARE(edit.calendarWidget(), cw);
2786
edit.setDateRange(QDate(1980, 1, 5), QDate(1980, 2, 11));
2787
QCOMPARE(cw->minimumDate(), edit.minimumDate());
2788
QCOMPARE(cw->maximumDate(), edit.maximumDate());
2789
edit.setDate(QDate(1980, 1, 31));
2790
QCOMPARE(edit.date(), cw->selectedDate());
2791
cw->setSelectedDate(QDate(1980, 1, 30));
2792
QCOMPARE(edit.date(), cw->selectedDate());
2795
testWidget->setDisplayFormat("dd/MM/yyyy");
2796
testWidget->setDateTime(QDateTime(QDate(2000, 1, 1), QTime(0, 0)));
2798
testWidget->setCalendarPopup(true);
2799
QCOMPARE(testWidget->calendarPopup(), true);
2800
QStyle *style = testWidget->style();
2801
QStyleOptionComboBox opt;
2802
opt.initFrom(testWidget);
2803
opt.editable = true;
2804
opt.subControls = QStyle::SC_ComboBoxArrow;
2805
QRect rect = style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, testWidget);
2806
QTest::mouseClick(testWidget, Qt::LeftButton, 0, QPoint(rect.left()+rect.width()/2, rect.top()+rect.height()/2));
2807
QWidget *wid = testWidget->findChild<QWidget *>("qt_datetimedit_calendar");
2812
timeEdit.setCalendarPopup(true);
2815
opt.initFrom(&timeEdit);
2816
opt.subControls = QStyle::SC_ComboBoxArrow;
2817
rect = style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, &timeEdit);
2818
QTest::mouseClick(&timeEdit, Qt::LeftButton, 0, QPoint(rect.left()+rect.width()/2, rect.top()+rect.height()/2));
2819
QWidget *wid2 = timeEdit.findChild<QWidget *>("qt_datetimedit_calendar");
2825
dateEdit.setCalendarPopup(true);
2826
dateEdit.setReadOnly(true);
2829
opt.initFrom(&dateEdit);
2830
opt.subControls = QStyle::SC_ComboBoxArrow;
2831
rect = style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, &dateEdit);
2832
QTest::mouseClick(&dateEdit, Qt::LeftButton, 0, QPoint(rect.left()+rect.width()/2, rect.top()+rect.height()/2));
2833
QWidget *wid3 = dateEdit.findChild<QWidget *>("qt_datetimedit_calendar");
2838
class RestoreLayoutDirectioner
2841
RestoreLayoutDirectioner(Qt::LayoutDirection was)
2845
~RestoreLayoutDirectioner()
2847
QApplication::setLayoutDirection(old);
2850
const Qt::LayoutDirection old;
2853
void tst_QDateTimeEdit::reverseTest()
2855
const RestoreLayoutDirectioner restorer(QApplication::layoutDirection());
2856
QApplication::setLayoutDirection(Qt::RightToLeft);
2857
testWidget->setDisplayFormat("dd/MM/yyyy");
2858
testWidget->setDate(QDate(2001, 3, 30));
2859
QCOMPARE(testWidget->lineEdit()->displayText(), QString("2001/03/30"));
2861
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
2863
QTest::keyClick(testWidget, Qt::Key_End);
2866
QEXPECT_FAIL("", "QTBUG-23674", Abort);
2868
QCOMPARE(testWidget->currentSection(), QDateTimeEdit::DaySection);
2869
QTest::keyClick(testWidget, Qt::Key_Up);
2870
QCOMPARE(testWidget->date(), QDate(2001, 3, 31));
2871
QCOMPARE(testWidget->lineEdit()->displayText(), QString("2001/03/31"));
2874
void tst_QDateTimeEdit::hour12Test()
2876
testWidget->setDisplayFormat("hh a");
2877
testWidget->setTime(QTime(0, 0, 0));
2878
QCOMPARE(testWidget->lineEdit()->displayText(), QString("12 am"));
2879
for (int i=0; i<11; ++i) {
2880
QTest::keyClick(testWidget, Qt::Key_Up);
2882
QCOMPARE(testWidget->lineEdit()->displayText(), QString("11 am"));
2883
QTest::keyClick(testWidget, Qt::Key_Up);
2884
QCOMPARE(testWidget->lineEdit()->displayText(), QString("12 pm"));
2885
for (int i=0; i<11; ++i) {
2886
QTest::keyClick(testWidget, Qt::Key_Up);
2888
QCOMPARE(testWidget->lineEdit()->displayText(), QString("11 pm"));
2889
QTest::keyClick(testWidget, Qt::Key_Up);
2890
QCOMPARE(testWidget->lineEdit()->displayText(), QString("11 pm"));
2891
for (int i=0; i<12; ++i) {
2892
QTest::keyClick(testWidget, Qt::Key_Down);
2894
QCOMPARE(testWidget->lineEdit()->displayText(), QString("11 am"));
2895
QTest::keyClick(testWidget, Qt::Key_1);
2896
QCOMPARE(testWidget->lineEdit()->displayText(), QString("1 am"));
2897
QTest::keyClick(testWidget, Qt::Key_3);
2898
QCOMPARE(testWidget->lineEdit()->displayText(), QString("1 am"));
2901
void tst_QDateTimeEdit::yyTest()
2903
testWidget->setDisplayFormat("dd-MMM-yy");
2904
testWidget->setTime(QTime(0, 0, 0));
2905
testWidget->setDateRange(QDate(2005, 1, 1), QDate(2010, 12, 31));
2906
testWidget->setDate(testWidget->minimumDate());
2907
testWidget->setCurrentSection(QDateTimeEdit::YearSection);
2909
QString jan = QDate::shortMonthName(1);
2910
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-05");
2911
QTest::keyClick(testWidget, Qt::Key_Up);
2912
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-06");
2913
QTest::keyClick(testWidget, Qt::Key_Up);
2914
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-07");
2915
QTest::keyClick(testWidget, Qt::Key_Up);
2916
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-08");
2917
QTest::keyClick(testWidget, Qt::Key_Up);
2918
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-09");
2919
QTest::keyClick(testWidget, Qt::Key_Up);
2920
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-10");
2921
QTest::keyClick(testWidget, Qt::Key_Up);
2922
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-10");
2923
testWidget->setWrapping(true);
2924
QTest::keyClick(testWidget, Qt::Key_Up);
2925
QCOMPARE(testWidget->lineEdit()->displayText(), "01-" + jan + "-05");
2927
testWidget->setDateRange(QDate(100, 1, 1), QDate(8000, 12, 31));
2928
testWidget->setDate(QDate(2000, 1, 1));
2929
testWidget->setCurrentSection(QDateTimeEdit::YearSection);
2930
testWidget->setWrapping(false);
2931
for (int i=0; i<10; ++i) {
2932
for (int j=0; j<50; ++j) {
2933
testWidget->stepBy(-1);
2935
testWidget->stepBy(-50);
2936
QCOMPARE(testWidget->sectionText(QDateTimeEdit::YearSection), QString("00"));
2937
QCOMPARE(testWidget->date(), QDate(2000 - ((i + 1) * 100), 1, 1));
2941
void tst_QDateTimeEdit::task108572()
2943
testWidget->setDisplayFormat("hh:mm:ss.zzz");
2944
testWidget->setTime(QTime(0, 1, 2, 0));
2945
QCOMPARE(testWidget->lineEdit()->displayText(), QString("00:01:02.000"));
2947
testWidget->setCurrentSection(QDateTimeEdit::MSecSection);
2948
QTest::keyClick(testWidget, Qt::Key_Return);
2949
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("000"));
2950
QTest::keyClick(testWidget, Qt::Key_2);
2951
QCOMPARE(testWidget->lineEdit()->displayText(), QString("00:01:02.2"));
2952
QTest::keyClick(testWidget, Qt::Key_Return);
2953
QCOMPARE(testWidget->lineEdit()->displayText(), QString("00:01:02.200"));
2954
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("200"));
2955
QCOMPARE(testWidget->time(), QTime(0, 1, 2, 200));
2958
void tst_QDateTimeEdit::task149097()
2960
QSignalSpy dtSpy(testWidget, SIGNAL(dateTimeChanged(QDateTime)));
2961
QSignalSpy dSpy(testWidget, SIGNAL(dateChanged(QDate)));
2962
QSignalSpy tSpy(testWidget, SIGNAL(timeChanged(QTime)));
2964
testWidget->setDisplayFormat("yyyy/MM/dd hh:mm:ss");
2965
testWidget->setDateTime(QDateTime(QDate(2001, 02, 03), QTime(5, 1, 2)));
2966
// QTest::keyClick(testWidget, Qt::Key_Enter);
2967
QCOMPARE(dtSpy.count(), 1);
2968
QCOMPARE(dSpy.count(), 1);
2969
QCOMPARE(tSpy.count(), 1);
2970
testWidget->setCurrentSection(QDateTimeEdit::YearSection);
2971
testWidget->stepBy(1);
2973
QCOMPARE(dtSpy.count(), 2);
2974
QCOMPARE(dSpy.count(), 2);
2975
QCOMPARE(tSpy.count(), 1);
2977
testWidget->setCurrentSection(QDateTimeEdit::MinuteSection);
2978
testWidget->stepBy(1);
2980
QCOMPARE(dtSpy.count(), 3);
2981
QCOMPARE(dSpy.count(), 2);
2982
QCOMPARE(tSpy.count(), 2);
2985
void tst_QDateTimeEdit::task148725()
2987
testWidget->setDisplayFormat("dd/MM");
2988
testWidget->setDate(QDate(2001, 2, 27));
2989
testWidget->stepBy(1);
2990
QCOMPARE(testWidget->date(), QDate(2001, 2, 28));
2991
testWidget->stepBy(1);
2992
QCOMPARE(testWidget->date(), QDate(2001, 2, 28));
2993
testWidget->setWrapping(true);
2994
testWidget->stepBy(1);
2995
QCOMPARE(testWidget->date(), QDate(2001, 2, 1));
2998
void tst_QDateTimeEdit::task148522()
3001
const QDateTime dt(QDate(2000, 12, 12), QTime(12, 13, 14, 15));
3002
edit.setDateTime(dt);
3003
QCOMPARE(edit.dateTime(), dt);
3006
void tst_QDateTimeEdit::ddMMMMyyyy()
3008
testWidget->setDisplayFormat("dd.MMMM.yyyy");
3009
testWidget->setDate(QDate(2000, 1, 1));
3010
testWidget->setCurrentSection(QDateTimeEdit::YearSection);
3011
QTest::keyClick(testWidget, Qt::Key_Enter);
3012
QCOMPARE(testWidget->lineEdit()->selectedText(), QString("2000"));
3014
QTest::keyClick(testWidget, Qt::Key_Right, Qt::ControlModifier);
3016
QTest::keyClick(testWidget, Qt::Key_End);
3018
QTest::keyClick(testWidget, Qt::Key_Backspace);
3020
QEXPECT_FAIL("", "QTBUG-23674", Abort);
3022
QCOMPARE(testWidget->lineEdit()->text(), "01." + QDate::longMonthName(1) + ".200");
3025
#ifndef QT_NO_WHEELEVENT
3026
void tst_QDateTimeEdit::wheelEvent()
3028
testWidget->setDisplayFormat("dddd/MM");
3029
testWidget->setDate(QDate(2000, 2, 21));
3030
testWidget->setCurrentSection(QDateTimeEdit::DaySection);
3031
QWheelEvent w(testWidget->lineEdit()->geometry().center(), 120, 0, 0);
3032
qApp->sendEvent(testWidget, &w);
3033
QCOMPARE(testWidget->date(), QDate(2000, 2, 22));
3034
testWidget->setCurrentSection(QDateTimeEdit::MonthSection);
3035
qApp->sendEvent(testWidget, &w);
3036
QCOMPARE(testWidget->date(), QDate(2000, 3, 22));
3038
#endif // !QT_NO_WHEELEVENT
3040
void tst_QDateTimeEdit::specialValueCornerCase()
3042
// if you set minimum to value it won't update since value won't
3043
// be bounded to anything. If you have a specialValueText it needs
3044
// to call updateEdit to make sure the text is changed
3047
edit.setSpecialValueText("foobar");
3048
edit.setMinimumDate(edit.date());
3049
QCOMPARE(edit.minimumDate(), edit.date());
3050
QCOMPARE(edit.text(), QString("foobar"));
3053
void tst_QDateTimeEdit::cursorPositionOnInit()
3056
EditorDateEdit edit;
3057
edit.setDisplayFormat("dd/MM");
3059
QCOMPARE(edit.lineEdit()->cursorPosition(), 0);
3063
EditorDateEdit edit;
3064
edit.setDisplayFormat("dd/MM");
3065
edit.setSpecialValueText("special");
3066
edit.setMinimumDate(edit.date());
3068
QCOMPARE(edit.lineEdit()->cursorPosition(), 7);
3069
// ### legacy behavior. Keep it like this rather than changing
3070
// ### but add a test none-the-less
3074
void tst_QDateTimeEdit::task118867()
3076
EditorDateEdit edit;
3077
edit.setDisplayFormat("hh:mm");
3078
edit.setMinimumTime(QTime(5, 30));
3079
edit.setMaximumTime(QTime(6, 30));
3080
QCOMPARE(edit.text(), QString("05:30"));
3081
edit.lineEdit()->setCursorPosition(5);
3082
QTest::keyClick(&edit, Qt::Key_Backspace);
3083
QCOMPARE(edit.text(), QString("05:3"));
3084
QTest::keyClick(&edit, Qt::Key_Backspace);
3085
QCOMPARE(edit.text(), QString("05:"));
3086
QTest::keyClick(&edit, Qt::Key_1);
3087
QCOMPARE(edit.text(), QString("05:"));
3088
QTest::keyClick(&edit, Qt::Key_2);
3089
QCOMPARE(edit.text(), QString("05:"));
3090
QTest::keyClick(&edit, Qt::Key_3);
3091
QCOMPARE(edit.text(), QString("05:3"));
3092
QTest::keyClick(&edit, Qt::Key_3);
3093
QCOMPARE(edit.text(), QString("05:33"));
3096
void tst_QDateTimeEdit::nextPrevSection_data()
3098
QTest::addColumn<Qt::Key>("key");
3099
QTest::addColumn<Qt::KeyboardModifiers>("modifiers");
3100
QTest::addColumn<QString>("selectedText");
3102
QTest::newRow("tab") << Qt::Key_Tab << (Qt::KeyboardModifiers)Qt::NoModifier << QString("56");
3103
QTest::newRow("backtab") << Qt::Key_Backtab << (Qt::KeyboardModifiers)Qt::NoModifier << QString("12");
3104
QTest::newRow("shift-tab") << Qt::Key_Tab << (Qt::KeyboardModifiers)Qt::ShiftModifier << QString("12");
3105
QTest::newRow("/") << Qt::Key_Slash << (Qt::KeyboardModifiers)Qt::NoModifier << QString("56");
3106
QTest::newRow("b") << Qt::Key_B << (Qt::KeyboardModifiers)Qt::NoModifier << QString("56");
3107
QTest::newRow("c") << Qt::Key_C << (Qt::KeyboardModifiers)Qt::NoModifier << QString("56");
3109
// 1. mac doesn't do these,
3110
// 2. some WinCE devices do not have modifiers
3111
#if !defined(Q_OS_MAC) && !defined(WINCE_NO_MODIFIER_KEYS)
3112
QTest::newRow("ctrl-right") << Qt::Key_Right << (Qt::KeyboardModifiers)Qt::ControlModifier << QString("56");
3113
QTest::newRow("ctrl-left") << Qt::Key_Left << (Qt::KeyboardModifiers)Qt::ControlModifier << QString("12");
3117
void tst_QDateTimeEdit::nextPrevSection()
3119
QFETCH(Qt::Key, key);
3120
QFETCH(Qt::KeyboardModifiers, modifiers);
3121
QFETCH(QString, selectedText);
3123
EditorDateEdit edit;
3124
edit.setDisplayFormat("hh/mm/bc9ss");
3125
edit.setTime(QTime(12, 34, 56));
3127
edit.setSelectedSection(QDateTimeEdit::MinuteSection);
3128
QCOMPARE(edit.lineEdit()->selectedText(), QString("34")); // selftest
3129
QTest::keyClick(&edit, key, modifiers);
3130
QCOMPARE(edit.lineEdit()->selectedText(), selectedText);
3133
void tst_QDateTimeEdit::dateEditTimeEditFormats()
3136
t.setDisplayFormat("hh yyyy");
3137
QCOMPARE(t.displayedSections(), QDateTimeEdit::HourSection);
3140
d.setDisplayFormat("hh yyyy");
3141
QCOMPARE(d.displayedSections(), QDateTimeEdit::YearSection);
3144
void tst_QDateTimeEdit::timeSpec_data()
3146
QTest::addColumn<bool>("useSetProperty");
3147
QTest::newRow("setProperty") << true;
3148
QTest::newRow("setTimeSpec") << false;
3151
void tst_QDateTimeEdit::timeSpec()
3153
QFETCH(bool, useSetProperty);
3156
QCOMPARE(edit.dateTime().timeSpec(), edit.timeSpec());
3157
QCOMPARE(edit.minimumDateTime().timeSpec(), edit.timeSpec());
3158
QCOMPARE(edit.maximumDateTime().timeSpec(), edit.timeSpec());
3159
if (useSetProperty) {
3160
edit.setProperty("timeSpec", Qt::UTC);
3162
edit.setTimeSpec(Qt::UTC);
3164
QCOMPARE(edit.minimumDateTime().timeSpec(), edit.timeSpec());
3165
QCOMPARE(edit.maximumDateTime().timeSpec(), edit.timeSpec());
3166
QCOMPARE(edit.dateTime().timeSpec(), edit.timeSpec());
3167
if (useSetProperty) {
3168
edit.setProperty("timeSpec", Qt::LocalTime);
3170
edit.setTimeSpec(Qt::LocalTime);
3172
const QDateTime dt = edit.dateTime();
3173
QCOMPARE(edit.timeSpec(), Qt::LocalTime);
3174
const QDateTime utc = dt.toUTC();
3175
if (dt.time() != utc.time()) {
3176
const QDateTime min(QDate(1999, 1, 1), QTime(1, 0, 0), Qt::LocalTime);
3177
edit.setMinimumDateTime(min);
3178
QCOMPARE(edit.minimumTime(), min.time());
3179
if (useSetProperty) {
3180
edit.setProperty("timeSpec", Qt::UTC);
3182
edit.setTimeSpec(Qt::UTC);
3184
QVERIFY(edit.minimumTime() != min.time());
3185
QVERIFY(edit.minimumDateTime().timeSpec() != min.timeSpec());
3186
QCOMPARE(edit.minimumDateTime().toTime_t(), min.toTime_t());
3188
QSKIP("Not tested in the GMT timezone");
3192
void tst_QDateTimeEdit::timeSpecBug()
3194
testWidget->setTimeSpec(Qt::UTC);
3195
testWidget->setDisplayFormat("hh:mm");
3196
testWidget->setTime(QTime(2, 2));
3197
const QString oldText = testWidget->text();
3198
const QDateTime oldDateTime = testWidget->dateTime();
3199
QTest::keyClick(testWidget, Qt::Key_Tab);
3200
QCOMPARE(oldDateTime, testWidget->dateTime());
3201
QCOMPARE(oldText, testWidget->text());
3204
void tst_QDateTimeEdit::timeSpecInit()
3206
QDateTime utc(QDate(2000, 1, 1), QTime(12, 0, 0), Qt::UTC);
3207
QDateTimeEdit widget(utc);
3208
QCOMPARE(widget.dateTime(), utc);
3211
void tst_QDateTimeEdit::cachedDayTest()
3213
testWidget->setDisplayFormat("MM/dd");
3214
testWidget->setDate(QDate(2007, 1, 30));
3215
testWidget->setCurrentSection(QDateTimeEdit::DaySection);
3216
//QTest::keyClick(testWidget->lineEdit(), Qt::Key_Up); // this doesn't work
3217
//on Mac. Qt Test bug? ###
3218
QTest::keyClick(testWidget, Qt::Key_Up);
3219
testWidget->setCurrentSection(QDateTimeEdit::MonthSection);
3220
QTest::keyClick(testWidget, Qt::Key_Up);
3221
QCOMPARE(testWidget->date(), QDate(2007, 2, 28));
3222
QTest::keyClick(testWidget, Qt::Key_Up);
3223
QCOMPARE(testWidget->date(), QDate(2007, 3, 31));
3224
QTest::keyClick(testWidget, Qt::Key_Down);
3225
QCOMPARE(testWidget->date(), QDate(2007, 2, 28));
3226
QTest::keyClick(testWidget, Qt::Key_Down);
3227
QCOMPARE(testWidget->date(), QDate(2007, 1, 31));
3229
testWidget->setCurrentSection(QDateTimeEdit::DaySection);
3230
QTest::keyClick(testWidget, Qt::Key_Down);
3231
QCOMPARE(testWidget->date(), QDate(2007, 1, 30));
3232
testWidget->setCurrentSection(QDateTimeEdit::MonthSection);
3233
QTest::keyClick(testWidget, Qt::Key_Up);
3234
QCOMPARE(testWidget->date(), QDate(2007, 2, 28));
3235
testWidget->setCurrentSection(QDateTimeEdit::MonthSection);
3236
QTest::keyClick(testWidget, Qt::Key_Up);
3237
QCOMPARE(testWidget->date(), QDate(2007, 3, 30));
3240
void tst_QDateTimeEdit::monthEdgeCase()
3242
EditorDateEdit edit;
3243
edit.setLocale(QLocale("fr_FR"));
3244
edit.setDisplayFormat("MMM d");
3245
edit.setDate(QDate(2000, 1, 1));
3246
QCOMPARE(edit.text(), QString("janv. 1"));
3247
edit.lineEdit()->setCursorPosition(5);
3248
QTest::keyClick(&edit, Qt::Key_Backspace);
3249
QCOMPARE(edit.text(), QString("janv 1"));
3252
class RestoreLocaler
3261
QLocale::setDefault(old);
3267
void tst_QDateTimeEdit::setLocale()
3270
QLocale::setDefault(QLocale("en_US"));
3272
EditorDateEdit edit;
3273
edit.setDisplayFormat("MMMM d");
3274
edit.setDate(QDate(2000, 1, 1));
3275
QCOMPARE(edit.text(), QString("January 1"));
3277
QLocale::setDefault(QLocale("no_NO"));
3279
EditorDateEdit edit;
3280
edit.setDisplayFormat("MMMM d");
3281
edit.setDate(QDate(2000, 1, 1));
3282
QCOMPARE(edit.text().toLower(), QString("januar 1"));
3283
// I get Januar on Mac and januar on linux
3285
QLocale::setDefault(QLocale("en_US"));
3287
EditorDateEdit edit;
3288
edit.setDisplayFormat("MMMM d");
3289
edit.setDate(QDate(2000, 1, 1));
3290
QCOMPARE(edit.text(), QString("January 1"));
3291
edit.setLocale(QLocale("no_NO"));
3292
QCOMPARE(edit.text().toLower(), QString("januar 1"));
3293
edit.setLocale(QLocale("no_NO"));
3297
void tst_QDateTimeEdit::potentialYYValueBug()
3299
EditorDateEdit edit;
3300
edit.setDisplayFormat("dd/MM/yy");
3301
QCOMPARE(edit.minimumDate(), QDate(1752, 9, 14));
3302
edit.setDate(edit.minimumDate());
3303
edit.lineEdit()->setFocus();
3306
QTest::keyClick(&edit, Qt::Key_Right, Qt::ControlModifier);
3308
QTest::keyClick(&edit, Qt::Key_End);
3310
QTest::keyClick(&edit, Qt::Key_Backspace);
3312
QEXPECT_FAIL("", "QTBUG-23674", Abort);
3314
QCOMPARE(edit.text(), QString("14/09/5"));
3317
void tst_QDateTimeEdit::textSectionAtEnd()
3319
EditorDateEdit edit;
3320
edit.setDisplayFormat("MMMM");
3321
edit.setDate(QDate(2000, 1, 1));
3322
edit.lineEdit()->setFocus();
3324
QTest::keyClick(&edit, Qt::Key_Right, Qt::ControlModifier);
3326
QTest::keyClick(&edit, Qt::Key_End);
3328
QTest::keyClick(&edit, Qt::Key_Backspace);
3330
QEXPECT_FAIL("", "QTBUG-23674", Abort);
3332
QCOMPARE(edit.text(), QString("Januar"));
3335
void tst_QDateTimeEdit::keypadAutoAdvance_data()
3337
QTest::addColumn<Qt::KeyboardModifiers>("modifiers");
3338
QTest::newRow("None") << (Qt::KeyboardModifiers)Qt::NoModifier;
3339
QTest::newRow("Keypad") << (Qt::KeyboardModifiers)Qt::KeypadModifier;
3340
// QTBUG-7842: Using KeyPad with shift (numlock off)
3341
QTest::newRow("Keypad+Shift") << (Qt::KeyboardModifiers)(Qt::KeypadModifier|Qt::ShiftModifier);
3344
void tst_QDateTimeEdit::keypadAutoAdvance()
3346
QFETCH(Qt::KeyboardModifiers, modifiers);
3348
EditorDateEdit edit;
3349
edit.setDate(QDate(2000, 2, 1));
3350
edit.setDisplayFormat("dd/MM");
3352
QTest::keyClick(&edit, Qt::Key_Left, Qt::ControlModifier);
3354
QTest::keyClick(&edit, Qt::Key_Home);
3356
QTest::keyClick(&edit, Qt::Key_Return);
3357
QCOMPARE(edit.lineEdit()->selectedText(), QString("01"));
3358
QTest::keyClick(&edit, Qt::Key_1, modifiers);
3359
QTest::keyClick(&edit, Qt::Key_2, modifiers);
3360
QCOMPARE(edit.lineEdit()->selectedText(), QString("02"));
3363
void tst_QDateTimeEdit::task196924()
3365
EditorDateEdit edit;
3366
edit.setDisplayFormat("dd/M/yyyy");
3367
edit.setDate(QDate(2345, 6, 17));
3368
QCOMPARE(edit.text(), QString("17/6/2345"));
3369
QTest::keyClick(&edit, Qt::Key_Tab);
3370
QCOMPARE(edit.lineEdit()->selectedText(), QString("6"));
3371
QTest::keyClick(&edit, Qt::Key_3);
3372
QCOMPARE(edit.lineEdit()->selectedText(), QString("2345"));
3373
QCOMPARE(edit.text(), QString("17/3/2345"));
3375
edit.setDisplayFormat("dd/MM/yyyy");
3376
edit.setDate(QDate(2345, 6, 17));
3377
edit.lineEdit()->setCursorPosition(0);
3378
QCOMPARE(edit.text(), QString("17/06/2345"));
3379
QTest::keyClick(&edit, Qt::Key_Tab);
3380
QCOMPARE(edit.lineEdit()->selectedText(), QString("06"));
3381
QTest::keyClick(&edit, Qt::Key_3);
3382
QCOMPARE(edit.lineEdit()->selectedText(), QString("2345"));
3383
QCOMPARE(edit.text(), QString("17/03/2345"));
3386
void tst_QDateTimeEdit::focusNextPrevChild()
3388
EditorDateEdit edit;
3389
edit.setDisplayFormat("dd/MM/yyyy");
3393
edit.setCurrentSection(QDateTimeEdit::DaySection);
3395
QCOMPARE(edit.currentSection(), QDateTimeEdit::DaySection);
3396
edit.focusNextPrevChild(true);
3397
QCOMPARE(edit.currentSection(), QDateTimeEdit::MonthSection);
3400
void tst_QDateTimeEdit::taskQTBUG_12384_timeSpecShowTimeOnly()
3402
QDateTime time = QDateTime::fromString("20100723 04:02:40", "yyyyMMdd hh:mm:ss");
3403
time.setTimeSpec(Qt::UTC);
3405
EditorDateEdit edit;
3406
edit.setDisplayFormat("hh:mm:ss");
3407
edit.setTimeSpec(Qt::UTC);
3408
edit.setDateTime(time);
3410
QCOMPARE(edit.minimumTime(), QTime(0, 0, 0, 0));
3411
QCOMPARE(edit.maximumTime(), QTime(23, 59, 59, 999));
3412
QCOMPARE(edit.time(), time.time());
3415
void tst_QDateTimeEdit::deleteCalendarWidget()
3419
QCalendarWidget *cw = 0;
3421
QVERIFY(!edit.calendarWidget());
3422
edit.setCalendarPopup(true);
3423
QVERIFY(edit.calendarWidget());
3424
edit.calendarWidget()->setObjectName("cw1");;
3427
cw = edit.calendarWidget();
3430
// it should create a new widget
3431
QVERIFY(edit.calendarWidget());
3432
QVERIFY(edit.calendarWidget()->objectName() != QLatin1String("cw1"));
3436
#ifdef QT_BUILD_INTERNAL
3438
typedef QPair<Qt::Key, Qt::KeyboardModifier> KeyPair;
3439
typedef QList<KeyPair> KeyPairList;
3441
Q_DECLARE_METATYPE(KeyPair)
3443
static inline KeyPair key(Qt::Key key, Qt::KeyboardModifier modifier = Qt::NoModifier) {
3444
return KeyPair(key, modifier);
3448
When a QDateEdit has its display format set to 'yyyy/MM/dd', its day
3449
set to 31 and its month set to 2, it will display 291 as the day until
3450
the cursor is moved or the focus changed. This is because
3451
QDateTimeParser::parse calls sectionSize() for the day section, which
3452
returns 1 when it should return 2.
3454
This test verifies that QDateTimeEditPrivate has the correct text,
3455
which is the text that is displayed until the cursor is moved or the
3459
void tst_QDateTimeEdit::dateEditCorrectSectionSize_data()
3461
QTest::addColumn<QLocale>("locale");
3462
QTest::addColumn<QDate>("defaultDate");
3463
QTest::addColumn<QString>("displayFormat");
3464
QTest::addColumn<KeyPairList>("keyPresses");
3465
QTest::addColumn<QString>("expectedDisplayString");
3467
const QDate defaultDate(2000, 1, 1);
3468
const QLocale defaultLocale(QLocale::English, QLocale::Australia);
3470
KeyPairList thirtyUpKeypresses;
3471
thirtyUpKeypresses.reserve(30);
3472
for (int i = 0; i < 30; ++i) {
3473
thirtyUpKeypresses << key(Qt::Key_Up);
3476
// Make day the current section, set day to 31st (invalid for february),
3477
// move to month field, set month to february (2).
3478
KeyPairList threeDigitDayIssueKeypresses;
3479
threeDigitDayIssueKeypresses << key(Qt::Key_Tab) << key(Qt::Key_Tab)
3480
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
3482
// Same as above, except day-year-month format.
3483
KeyPairList threeDigitDayIssueKeypresses_DayYearMonth;
3484
threeDigitDayIssueKeypresses_DayYearMonth << key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab)
3487
// Same as threeDigitDayIssueKeypresses, except doesn't require the day to be corrected.
3488
KeyPairList threeDigitDayIssueKeypresses_Nofixday;
3489
threeDigitDayIssueKeypresses_Nofixday << key(Qt::Key_Tab) << key(Qt::Key_Tab)
3490
<< key(Qt::Key_2) << key(Qt::Key_8) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
3492
// Set day to 31st (invalid for february), set month to february (2).
3493
KeyPairList reverseThreeDigitDayIssueKeypresses;
3494
reverseThreeDigitDayIssueKeypresses
3495
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_2);
3497
// Make day the current section, set day to 31st, move to month field, set month to november (11).
3498
KeyPairList threeDigitDayIssueKeypresses_TwoDigitMonth;
3499
threeDigitDayIssueKeypresses_TwoDigitMonth << key(Qt::Key_Tab) << key(Qt::Key_Tab) << key(Qt::Key_3)
3500
<< key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_1) << key(Qt::Key_1);
3502
// Make day the current section, set day to 3rd, move to month field, set month to february (2).
3503
KeyPairList threeDigitDayIssueKeypresses_OneDigitDay;
3504
threeDigitDayIssueKeypresses_OneDigitDay << key(Qt::Key_Tab) << key(Qt::Key_Tab)
3505
<< key(Qt::Key_3) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
3507
// Make day the current section, set day to 31st (invalid for february), move to month field,
3508
// set month to february (2).
3509
KeyPairList threeDigitDayIssueKeypresses_ShortMonthName;
3510
threeDigitDayIssueKeypresses_ShortMonthName << key(Qt::Key_Tab) << key(Qt::Key_Tab)
3511
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Up);
3513
// Make day the current section, set day to 31st (Monday), move to month field, set month to february (2).
3514
// Will probably never see this display format in a QDateTimeEdit, but it's good to test it anyway.
3515
KeyPairList threeDigitDayIssueKeypresses_DayName;
3516
threeDigitDayIssueKeypresses_DayName << key(Qt::Key_Tab) << key(Qt::Key_Tab) << thirtyUpKeypresses
3517
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
3519
KeyPairList threeDigitDayIssueKeypresses_DayName_DayYearMonth;
3520
threeDigitDayIssueKeypresses_DayName_DayYearMonth << thirtyUpKeypresses << key(Qt::Key_Tab)
3521
<< key(Qt::Key_Tab) << key(Qt::Key_2);
3523
KeyPairList threeDigitDayIssueKeypresses_DayName_YearDayMonth;
3524
threeDigitDayIssueKeypresses_DayName_YearDayMonth << key(Qt::Key_Tab) << thirtyUpKeypresses
3525
<< key(Qt::Key_Tab) << key(Qt::Key_2);
3527
KeyPairList threeDigitDayIssueKeypresses_DayName_DayMonthYear;
3528
threeDigitDayIssueKeypresses_DayName_DayMonthYear << thirtyUpKeypresses << key(Qt::Key_Tab)
3531
KeyPairList threeDigitDayIssueKeypresses_DayName_MonthDayYear;
3532
threeDigitDayIssueKeypresses_DayName_MonthDayYear << key(Qt::Key_Tab) << thirtyUpKeypresses
3533
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
3535
// Make day the current section, set day to 31st (invalid for february), move to month field,
3536
// set month to february (2).
3537
KeyPairList threeDigitDayIssueKeypresses_YearDayMonth;
3538
threeDigitDayIssueKeypresses_YearDayMonth << key(Qt::Key_Tab) << key(Qt::Key_3) << key(Qt::Key_1)
3539
<< key(Qt::Key_Tab) << key(Qt::Key_2);
3541
// Make day the current section, set day to 31st, move to month field, set month to february (2).
3542
KeyPairList threeDigitDayIssueKeypresses_MonthDayYear;
3543
threeDigitDayIssueKeypresses_MonthDayYear << key(Qt::Key_Tab) << key(Qt::Key_3) << key(Qt::Key_1)
3544
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
3546
// Same as above, except month-year-day format.
3547
KeyPairList threeDigitDayIssueKeypresses_MonthYearDay;
3548
threeDigitDayIssueKeypresses_MonthYearDay << key(Qt::Key_Tab) << key(Qt::Key_Tab) << key(Qt::Key_3)
3549
<< key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Tab, Qt::ShiftModifier)
3552
// Same as above, except short month name.
3553
KeyPairList threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay;
3554
threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << key(Qt::Key_Tab) << key(Qt::Key_Tab)
3555
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier)
3556
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Up);
3558
KeyPairList shortAndLongNameIssueKeypresses;
3559
shortAndLongNameIssueKeypresses << key(Qt::Key_Tab) << key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Up);
3561
QTest::newRow("no fixday, leap, yy/M/dddd") << defaultLocale << defaultDate << QString::fromLatin1("yy/M/dddd")
3562
<< threeDigitDayIssueKeypresses_DayName << QString::fromLatin1("00/2/Tuesday");
3564
QTest::newRow("no fixday, leap, yy/M/ddd") << defaultLocale << defaultDate << QString::fromLatin1("yy/M/ddd")
3565
<< threeDigitDayIssueKeypresses_DayName << QString::fromLatin1("00/2/Tue.");
3567
QTest::newRow("no fixday, leap, yy/MM/dddd") << defaultLocale << defaultDate << QString::fromLatin1("yy/MM/dddd")
3568
<< threeDigitDayIssueKeypresses_DayName << QString::fromLatin1("00/02/Tuesday");
3570
QTest::newRow("fixday, leap, yy/MM/dd") << defaultLocale << defaultDate << QString::fromLatin1("yy/MM/dd")
3571
<< threeDigitDayIssueKeypresses << QString::fromLatin1("00/02/29");
3573
QTest::newRow("fixday, leap, yy/MM/d") << defaultLocale << defaultDate << QString::fromLatin1("yy/MM/d")
3574
<< threeDigitDayIssueKeypresses << QString::fromLatin1("00/02/29");
3576
QTest::newRow("fixday, leap, yyyy/M/d") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/M/d")
3577
<< threeDigitDayIssueKeypresses << QString::fromLatin1("2000/2/29");
3579
QTest::newRow("no fixday, yyyy/M/d") << defaultLocale << defaultDate.addYears(1) << QString::fromLatin1("yyyy/M/d")
3580
<< threeDigitDayIssueKeypresses_Nofixday << QString::fromLatin1("2001/2/28");
3582
QTest::newRow("fixday, leap, 2-digit month, yyyy/M/dd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/M/dd")
3583
<< threeDigitDayIssueKeypresses_TwoDigitMonth << QString::fromLatin1("2000/11/30");
3585
QTest::newRow("no fixday, leap, 1-digit day, yyyy/M/dd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/M/dd")
3586
<< threeDigitDayIssueKeypresses_OneDigitDay << QString::fromLatin1("2000/2/03");
3588
QTest::newRow("fixday, leap, yyyy/MM/dd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/MM/dd")
3589
<< threeDigitDayIssueKeypresses << QString::fromLatin1("2000/02/29");
3591
QTest::newRow("no fixday, yyyy/MM/dd") << defaultLocale << defaultDate.addYears(1) << QString::fromLatin1("yyyy/MM/dd")
3592
<< threeDigitDayIssueKeypresses_Nofixday << QString::fromLatin1("2001/02/28");
3594
QTest::newRow("fixday, leap, 2-digit month, yyyy/MM/dd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/MM/dd")
3595
<< threeDigitDayIssueKeypresses_TwoDigitMonth << QString::fromLatin1("2000/11/30");
3597
QTest::newRow("no fixday, leap, yyyy/M/dddd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/M/dddd")
3598
<< threeDigitDayIssueKeypresses_DayName << QString::fromLatin1("2000/2/Tuesday");
3600
QTest::newRow("no fixday, leap, yyyy/MM/dddd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/MM/dddd")
3601
<< threeDigitDayIssueKeypresses_DayName << QString::fromLatin1("2000/02/Tuesday");
3603
QTest::newRow("fixday, leap, yyyy/dd/MM") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/dd/MM")
3604
<< threeDigitDayIssueKeypresses_YearDayMonth << QString::fromLatin1("2000/29/02");
3606
QTest::newRow("fixday, leap, yyyy/dd/M") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/dd/M")
3607
<< threeDigitDayIssueKeypresses_YearDayMonth << QString::fromLatin1("2000/29/2");
3609
QTest::newRow("fixday, leap, yyyy/d/M") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/d/M")
3610
<< threeDigitDayIssueKeypresses_YearDayMonth << QString::fromLatin1("2000/29/2");
3612
QTest::newRow("fixday, leap, yyyy/MMM/dd") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/MMM/dd")
3613
<< threeDigitDayIssueKeypresses_ShortMonthName << QString::fromLatin1("2000/Feb./29");
3615
QTest::newRow("fixday, leap, yyyy/MMM/d") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/MMM/d")
3616
<< threeDigitDayIssueKeypresses_ShortMonthName << QString::fromLatin1("2000/Feb./29");
3618
QTest::newRow("fixday, leap, yy/MMM/dd") << defaultLocale << defaultDate << QString::fromLatin1("yy/MMM/dd")
3619
<< threeDigitDayIssueKeypresses_ShortMonthName << QString::fromLatin1("00/Feb./29");
3621
QTest::newRow("fixday, leap, yyyy/dddd/M") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/dddd/M")
3622
<< threeDigitDayIssueKeypresses_DayName_YearDayMonth << QString::fromLatin1("2000/Tuesday/2");
3624
QTest::newRow("fixday, leap, yyyy/dddd/MM") << defaultLocale << defaultDate << QString::fromLatin1("yyyy/dddd/MM")
3625
<< threeDigitDayIssueKeypresses_DayName_YearDayMonth << QString::fromLatin1("2000/Tuesday/02");
3627
QTest::newRow("fixday, leap, d/M/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("d/M/yyyy")
3628
<< reverseThreeDigitDayIssueKeypresses << QString::fromLatin1("29/2/2000");
3630
QTest::newRow("fixday, leap, dd/MM/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("dd/MM/yyyy")
3631
<< reverseThreeDigitDayIssueKeypresses << QString::fromLatin1("29/02/2000");
3633
QTest::newRow("fixday, dd/MM/yyyy") << defaultLocale << defaultDate.addYears(1) << QString::fromLatin1("dd/MM/yyyy")
3634
<< reverseThreeDigitDayIssueKeypresses << QString::fromLatin1("28/02/2001");
3636
QTest::newRow("fixday, leap, dddd/MM/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("dddd/MM/yyyy")
3637
<< threeDigitDayIssueKeypresses_DayName_DayMonthYear << QString::fromLatin1("Tuesday/02/2000");
3639
QTest::newRow("fixday, leap, d/yy/M") << defaultLocale << defaultDate << QString::fromLatin1("d/yy/M")
3640
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/00/2");
3642
QTest::newRow("fixday, leap, d/yyyy/M") << defaultLocale << defaultDate << QString::fromLatin1("d/yyyy/M")
3643
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/2");
3645
QTest::newRow("fixday, leap, d/yyyy/MM") << defaultLocale << defaultDate << QString::fromLatin1("d/yyyy/MM")
3646
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/02");
3648
QTest::newRow("fixday, leap, dd/yy/MM") << defaultLocale << defaultDate << QString::fromLatin1("dd/yy/MM")
3649
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/00/02");
3651
QTest::newRow("fixday, leap, dd/yyyy/M") << defaultLocale << defaultDate << QString::fromLatin1("dd/yyyy/M")
3652
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/2");
3654
QTest::newRow("fixday, leap, dd/yyyy/MM") << defaultLocale << defaultDate << QString::fromLatin1("dd/yyyy/MM")
3655
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/02");
3657
QTest::newRow("fixday, leap, dddd/yy/M") << defaultLocale << defaultDate << QString::fromLatin1("dddd/yy/M")
3658
<< threeDigitDayIssueKeypresses_DayName_DayYearMonth << QString::fromLatin1("Tuesday/00/2");
3660
QTest::newRow("fixday, leap, dddd/yy/MM") << defaultLocale << defaultDate << QString::fromLatin1("dddd/yy/MM")
3661
<< threeDigitDayIssueKeypresses_DayName_DayYearMonth << QString::fromLatin1("Tuesday/00/02");
3663
QTest::newRow("fixday, leap, M/d/yy") << defaultLocale << defaultDate << QString::fromLatin1("M/d/yy")
3664
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("2/29/00");
3666
QTest::newRow("fixday, leap, M/d/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("M/d/yyyy")
3667
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("2/29/2000");
3669
QTest::newRow("fixday, leap, M/dd/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("M/dd/yyyy")
3670
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("2/29/2000");
3672
QTest::newRow("fixday, leap, M/dddd/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("M/dddd/yyyy")
3673
<< threeDigitDayIssueKeypresses_DayName_MonthDayYear << QString::fromLatin1("2/Tuesday/2000");
3675
QTest::newRow("fixday, leap, MM/dd/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("MM/dd/yyyy")
3676
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("02/29/2000");
3678
QTest::newRow("fixday, leap, MM/dddd/yyyy") << defaultLocale << defaultDate << QString::fromLatin1("MM/dddd/yyyy")
3679
<< threeDigitDayIssueKeypresses_DayName_MonthDayYear << QString::fromLatin1("02/Tuesday/2000");
3681
QTest::newRow("fixday, leap, M/yyyy/dd") << defaultLocale << defaultDate << QString::fromLatin1("M/yyyy/dd")
3682
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("2/2000/29");
3684
QTest::newRow("fixday, leap, M/yy/dd") << defaultLocale << defaultDate << QString::fromLatin1("M/yy/dd")
3685
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("2/00/29");
3687
QTest::newRow("fixday, leap, M/yy/d") << defaultLocale << defaultDate << QString::fromLatin1("M/yy/d")
3688
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("2/00/29");
3690
QTest::newRow("fixday, leap, MM/yyyy/dd") << defaultLocale << defaultDate << QString::fromLatin1("MM/yyyy/dd")
3691
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("02/2000/29");
3693
QTest::newRow("fixday, leap, MMM/yy/d") << defaultLocale << defaultDate << QString::fromLatin1("MMM/yy/d")
3694
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb./00/29");
3696
QTest::newRow("fixday, leap, MMM/yyyy/d") << defaultLocale << defaultDate << QString::fromLatin1("MMM/yyyy/d")
3697
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb./2000/29");
3699
QTest::newRow("fixday, MMM/yyyy/d") << defaultLocale << defaultDate.addYears(1) << QString::fromLatin1("MMM/yyyy/d")
3700
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb./2001/28");
3702
QTest::newRow("fixday, leap, MMM/yyyy/dd") << defaultLocale << defaultDate << QString::fromLatin1("MMM/yyyy/dd")
3703
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb./2000/29");
3705
QTest::newRow("fixday, leap, dddd, dd. MMMM yyyy") << defaultLocale
3706
<< defaultDate << QString::fromLatin1("dddd, dd. MMMM yyyy")
3707
<< shortAndLongNameIssueKeypresses << QString::fromLatin1("Tuesday, 29. February 2000");
3709
QTest::newRow("fixday, leap, german, dddd, dd. MMMM yyyy") << QLocale(QLocale::German, QLocale::Germany)
3710
<< defaultDate << QString::fromLatin1("dddd, dd. MMMM yyyy")
3711
<< shortAndLongNameIssueKeypresses << QString::fromLatin1("Dienstag, 29. Februar 2000");
3714
void tst_QDateTimeEdit::dateEditCorrectSectionSize()
3716
QFETCH(QLocale, locale);
3717
QFETCH(QDate, defaultDate);
3718
QFETCH(QString, displayFormat);
3719
QFETCH(KeyPairList, keyPresses);
3720
QFETCH(QString, expectedDisplayString);
3723
edit.setLocale(locale);
3724
edit.setDate(defaultDate);
3725
edit.setDisplayFormat(displayFormat);
3728
// For some reason, we need to set the selected section for the dd/MM/yyyy tests,
3729
// otherwise the 3 is inserted at the front of 01/01/2000 (301/01/2000), instead of the
3730
// selected text being replaced. This is not an issue for the yyyy/MM/dd format though...
3731
edit.setSelectedSection(edit.sectionAt(0));
3733
foreach (const KeyPair &keyPair, keyPresses)
3734
QTest::keyClick(&edit, keyPair.first, keyPair.second);
3736
QDateTimeEditPrivate* edit_d_ptr(static_cast<QDateTimeEditPrivate*>(qt_widget_private(&edit)));
3737
QCOMPARE(edit_d_ptr->text, expectedDisplayString);
3741
QTEST_MAIN(tst_QDateTimeEdit)
3742
#include "tst_qdatetimeedit.moc"