Fix 3 digit day being displayed by QDateEdit.

When a QDateEdit has its display format set to "yyyy/MM/dd", its day
set to 31 and its month set to 2, it will display 291 as the day until
the cursor is moved or the focus changed. This is because
QDateTimeParser::parse calls sectionSize() for the day section, which
will sometimes return an incorrect size. There are also other display
formats affected by this bug (e.g. long day names).

For example, (in the context of sectionSize()) when text is
"2000/01/31" and displayText() is "2000/2/31", there is a difference
between displayText() and text - text is the previous value and
displayText() is the new value. The size difference is always due to
leading zeroes.

This patch makes QDateTimeParser keep track of the quantity of zeroes
added to each section and then factors this value into the result of
sectionSize() if there is a size difference between text and
displayText().

Task-number: QTBUG-26847
Change-Id: I3823cc41167ec920f742cb6a20d39fc5f433c915
Reviewed-by: Mitch Curtis <mitch.curtis@nokia.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Reviewed-by: aavit <qt_aavit@ovi.com>
This commit is contained in:
Mitch Curtis 2012-08-21 14:46:42 +02:00 committed by Qt by Nokia
parent aba8de1bee
commit 2b562b7564
4 changed files with 294 additions and 10 deletions

View File

@ -4492,7 +4492,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
case 'h':
if (parserType != QVariant::Date) {
const Section hour = (sect == 'h') ? Hour12Section : Hour24Section;
const SectionNode sn = { hour, i - add, countRepeat(newFormat, i, 2) };
const SectionNode sn = { hour, i - add, countRepeat(newFormat, i, 2), 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
i += sn.count - 1;
@ -4502,7 +4502,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
break;
case 'm':
if (parserType != QVariant::Date) {
const SectionNode sn = { MinuteSection, i - add, countRepeat(newFormat, i, 2) };
const SectionNode sn = { MinuteSection, i - add, countRepeat(newFormat, i, 2), 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
i += sn.count - 1;
@ -4512,7 +4512,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
break;
case 's':
if (parserType != QVariant::Date) {
const SectionNode sn = { SecondSection, i - add, countRepeat(newFormat, i, 2) };
const SectionNode sn = { SecondSection, i - add, countRepeat(newFormat, i, 2), 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
i += sn.count - 1;
@ -4523,7 +4523,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
case 'z':
if (parserType != QVariant::Date) {
const SectionNode sn = { MSecSection, i - add, countRepeat(newFormat, i, 3) < 3 ? 1 : 3 };
const SectionNode sn = { MSecSection, i - add, countRepeat(newFormat, i, 3) < 3 ? 1 : 3, 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
i += sn.count - 1;
@ -4535,7 +4535,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
case 'a':
if (parserType != QVariant::Date) {
const bool cap = (sect == 'A');
const SectionNode sn = { AmPmSection, i - add, (cap ? 1 : 0) };
const SectionNode sn = { AmPmSection, i - add, (cap ? 1 : 0), 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
newDisplay |= AmPmSection;
@ -4551,7 +4551,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
const int repeat = countRepeat(newFormat, i, 4);
if (repeat >= 2) {
const SectionNode sn = { repeat == 4 ? YearSection : YearSection2Digits,
i - add, repeat == 4 ? 4 : 2 };
i - add, repeat == 4 ? 4 : 2, 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
i += sn.count - 1;
@ -4562,7 +4562,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
break;
case 'M':
if (parserType != QVariant::Time) {
const SectionNode sn = { MonthSection, i - add, countRepeat(newFormat, i, 4) };
const SectionNode sn = { MonthSection, i - add, countRepeat(newFormat, i, 4), 0 };
newSectionNodes.append(sn);
newSeparators.append(unquote(newFormat.mid(index, i - index)));
i += sn.count - 1;
@ -4573,7 +4573,7 @@ bool QDateTimeParser::parseFormat(const QString &newFormat)
case 'd':
if (parserType != QVariant::Time) {
const int repeat = countRepeat(newFormat, i, 4);
const SectionNode sn = { repeat >= 3 ? DayOfWeekSection : DaySection, i - add, repeat };
const SectionNode sn = { repeat >= 3 ? DayOfWeekSection : DaySection, i - add, repeat, 0 };
newSectionNodes.append(sn);
appendSeparator(&newSeparators, newFormat, index, i - index, lastQuote);
i += sn.count - 1;
@ -4637,8 +4637,26 @@ int QDateTimeParser::sectionSize(int sectionIndex) const
qWarning("QDateTimeParser::sectionSize Internal error (%d)", sectionIndex);
return -1;
}
if (sectionIndex == sectionNodes.size() - 1) {
return displayText().size() - sectionPos(sectionIndex) - separators.last().size();
// In some cases there is a difference between displayText() and text.
// e.g. when text is 2000/01/31 and displayText() is "2000/2/31" - text
// is the previous value and displayText() is the new value.
// The size difference is always due to leading zeroes.
int sizeAdjustment = 0;
if (displayText().size() != text.size()) {
// Any zeroes added before this section will affect our size.
int preceedingZeroesAdded = 0;
if (sectionNodes.size() > 1 && context == DateTimeEdit) {
for (QVector<SectionNode>::ConstIterator sectionIt = sectionNodes.constBegin();
sectionIt != sectionNodes.constBegin() + sectionIndex; ++sectionIt) {
preceedingZeroesAdded += sectionIt->zeroesAdded;
}
}
sizeAdjustment = preceedingZeroesAdded;
}
return displayText().size() + sizeAdjustment - sectionPos(sectionIndex) - separators.last().size();
} else {
return sectionPos(sectionIndex + 1) - sectionPos(sectionIndex)
- separators.at(sectionIndex + 1).size();
@ -4926,6 +4944,7 @@ int QDateTimeParser::parseSection(const QDateTime &currentValue, int sectionInde
text.insert(index, QString().fill(QLatin1Char('0'), missingZeroes));
used = sectionmaxsize;
cursorPosition += missingZeroes;
++(const_cast<QDateTimeParser*>(this)->sectionNodes[sectionIndex].zeroesAdded);
} else {
state = Intermediate;;
}

View File

@ -120,12 +120,15 @@ public:
first.type = FirstSection;
first.pos = -1;
first.count = -1;
first.zeroesAdded = 0;
last.type = FirstSection;
last.pos = -1;
last.count = -1;
last.zeroesAdded = 0;
none.type = NoSection;
none.pos = -1;
none.count = -1;
none.zeroesAdded = 0;
}
virtual ~QDateTimeParser() {}
enum {
@ -168,6 +171,7 @@ public:
Section type;
mutable int pos;
int count;
int zeroesAdded;
};
enum State { // duplicated from QValidator

View File

@ -1,7 +1,7 @@
CONFIG += testcase
CONFIG += parallel_test
TARGET = tst_qdatetimeedit
QT += widgets testlib
QT += widgets testlib core-private widgets-private
SOURCES += tst_qdatetimeedit.cpp
wincewm50smart-msvc2005: DEFINES += WINCE_NO_MODIFIER_KEYS

View File

@ -85,6 +85,8 @@
#include <QTestEventList>
#include <QDateEdit>
#include <private/qdatetimeedit_p.h>
#ifdef Q_OS_WIN
# include <windows.h>
# undef min
@ -278,6 +280,10 @@ private slots:
void deleteCalendarWidget();
#ifdef QT_BUILD_INTERNAL
void dateEditCorrectSectionSize_data();
void dateEditCorrectSectionSize();
#endif
private:
EditorDateEdit* testWidget;
QWidget *testFocusWidget;
@ -3487,5 +3493,260 @@ void tst_QDateTimeEdit::deleteCalendarWidget()
}
}
#ifdef QT_BUILD_INTERNAL
typedef QPair<Qt::Key, Qt::KeyboardModifier> KeyPair;
typedef QList<KeyPair> KeyPairList;
Q_DECLARE_METATYPE(KeyPair)
Q_DECLARE_METATYPE(KeyPairList)
static inline KeyPair key(Qt::Key key, Qt::KeyboardModifier modifier = Qt::NoModifier) {
return KeyPair(key, modifier);
}
/*
When a QDateEdit has its display format set to 'yyyy/MM/dd', its day
set to 31 and its month set to 2, it will display 291 as the day until
the cursor is moved or the focus changed. This is because
QDateTimeParser::parse calls sectionSize() for the day section, which
returns 1 when it should return 2.
This test verifies that QDateTimeEditPrivate has the correct text,
which is the text that is displayed until the cursor is moved or the
focus changed.
*/
void tst_QDateTimeEdit::dateEditCorrectSectionSize_data()
{
QTest::addColumn<QDate>("defaultDate");
QTest::addColumn<QString>("displayFormat");
QTest::addColumn<KeyPairList>("keyPresses");
QTest::addColumn<QString>("expectedDisplayString");
const QDate defaultDate(2000, 1, 1);
KeyPairList thirtyUpKeypresses;
thirtyUpKeypresses.reserve(30);
for (int i = 0; i < 30; ++i) {
thirtyUpKeypresses << key(Qt::Key_Up);
}
// Make day the current section, set day to 31st (invalid for february),
// move to month field, set month to february (2).
KeyPairList threeDigitDayIssueKeypresses;
threeDigitDayIssueKeypresses << key(Qt::Key_Tab) << key(Qt::Key_Tab)
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
// Same as above, except day-year-month format.
KeyPairList threeDigitDayIssueKeypresses_DayYearMonth;
threeDigitDayIssueKeypresses_DayYearMonth << key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab)
<< key(Qt::Key_2);
// Same as threeDigitDayIssueKeypresses, except doesn't require the day to be corrected.
KeyPairList threeDigitDayIssueKeypresses_Nofixday;
threeDigitDayIssueKeypresses_Nofixday << key(Qt::Key_Tab) << key(Qt::Key_Tab)
<< key(Qt::Key_2) << key(Qt::Key_8) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
// Set day to 31st (invalid for february), set month to february (2).
KeyPairList reverseThreeDigitDayIssueKeypresses;
reverseThreeDigitDayIssueKeypresses
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_2);
// Make day the current section, set day to 31st, move to month field, set month to november (11).
KeyPairList threeDigitDayIssueKeypresses_TwoDigitMonth;
threeDigitDayIssueKeypresses_TwoDigitMonth << key(Qt::Key_Tab) << key(Qt::Key_Tab) << key(Qt::Key_3)
<< key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_1) << key(Qt::Key_1);
// Make day the current section, set day to 3rd, move to month field, set month to february (2).
KeyPairList threeDigitDayIssueKeypresses_OneDigitDay;
threeDigitDayIssueKeypresses_OneDigitDay << key(Qt::Key_Tab) << key(Qt::Key_Tab)
<< key(Qt::Key_3) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
// Make day the current section, set day to 31st (invalid for february), move to month field,
// set month to february (2).
KeyPairList threeDigitDayIssueKeypresses_ShortMonthName;
threeDigitDayIssueKeypresses_ShortMonthName << key(Qt::Key_Tab) << key(Qt::Key_Tab)
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Up);
// Make day the current section, set day to 31st (Monday), move to month field, set month to february (2).
// Will probably never see this display format in a QDateTimeEdit, but it's good to test it anyway.
KeyPairList threeDigitDayIssueKeypresses_DayName;
threeDigitDayIssueKeypresses_DayName << key(Qt::Key_Tab) << key(Qt::Key_Tab) << thirtyUpKeypresses
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
KeyPairList threeDigitDayIssueKeypresses_DayName_DayYearMonth;
threeDigitDayIssueKeypresses_DayName_DayYearMonth << thirtyUpKeypresses << key(Qt::Key_Tab)
<< key(Qt::Key_Tab) << key(Qt::Key_2);
KeyPairList threeDigitDayIssueKeypresses_DayName_YearDayMonth;
threeDigitDayIssueKeypresses_DayName_YearDayMonth << key(Qt::Key_Tab) << thirtyUpKeypresses
<< key(Qt::Key_Tab) << key(Qt::Key_2);
KeyPairList threeDigitDayIssueKeypresses_DayName_DayMonthYear;
threeDigitDayIssueKeypresses_DayName_DayMonthYear << thirtyUpKeypresses << key(Qt::Key_Tab)
<< key(Qt::Key_2);
KeyPairList threeDigitDayIssueKeypresses_DayName_MonthDayYear;
threeDigitDayIssueKeypresses_DayName_MonthDayYear << key(Qt::Key_Tab) << thirtyUpKeypresses
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
// Make day the current section, set day to 31st (invalid for february), move to month field,
// set month to february (2).
KeyPairList threeDigitDayIssueKeypresses_YearDayMonth;
threeDigitDayIssueKeypresses_YearDayMonth << key(Qt::Key_Tab) << key(Qt::Key_3) << key(Qt::Key_1)
<< key(Qt::Key_Tab) << key(Qt::Key_2);
// Make day the current section, set day to 31st, move to month field, set month to february (2).
KeyPairList threeDigitDayIssueKeypresses_MonthDayYear;
threeDigitDayIssueKeypresses_MonthDayYear << key(Qt::Key_Tab) << key(Qt::Key_3) << key(Qt::Key_1)
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_2);
// Same as above, except month-year-day format.
KeyPairList threeDigitDayIssueKeypresses_MonthYearDay;
threeDigitDayIssueKeypresses_MonthYearDay << key(Qt::Key_Tab) << key(Qt::Key_Tab) << key(Qt::Key_3)
<< key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Tab, Qt::ShiftModifier)
<< key(Qt::Key_2);
// Same as above, except short month name.
KeyPairList threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay;
threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << key(Qt::Key_Tab) << key(Qt::Key_Tab)
<< key(Qt::Key_3) << key(Qt::Key_1) << key(Qt::Key_Tab, Qt::ShiftModifier)
<< key(Qt::Key_Tab, Qt::ShiftModifier) << key(Qt::Key_Up);
QTest::newRow("fixday, leap, yy/MM/dd") << defaultDate << QString::fromLatin1("yy/MM/dd")
<< threeDigitDayIssueKeypresses << QString::fromLatin1("00/02/29");
QTest::newRow("fixday, leap, yy/MM/d") << defaultDate << QString::fromLatin1("yy/MM/d")
<< threeDigitDayIssueKeypresses << QString::fromLatin1("00/02/29");
QTest::newRow("fixday, leap, yyyy/M/d") << defaultDate << QString::fromLatin1("yyyy/M/d")
<< threeDigitDayIssueKeypresses << QString::fromLatin1("2000/2/29");
QTest::newRow("no fixday, yyyy/M/d") << defaultDate.addYears(1) << QString::fromLatin1("yyyy/M/d")
<< threeDigitDayIssueKeypresses_Nofixday << QString::fromLatin1("2001/2/28");
QTest::newRow("fixday, leap, 2-digit month, yyyy/M/dd") << defaultDate << QString::fromLatin1("yyyy/M/dd")
<< threeDigitDayIssueKeypresses_TwoDigitMonth << QString::fromLatin1("2000/11/30");
QTest::newRow("no fixday, leap, 1-digit day, yyyy/M/dd") << defaultDate << QString::fromLatin1("yyyy/M/dd")
<< threeDigitDayIssueKeypresses_OneDigitDay << QString::fromLatin1("2000/2/03");
QTest::newRow("fixday, leap, yyyy/MM/dd") << defaultDate << QString::fromLatin1("yyyy/MM/dd")
<< threeDigitDayIssueKeypresses << QString::fromLatin1("2000/02/29");
QTest::newRow("no fixday, yyyy/MM/dd") << defaultDate.addYears(1) << QString::fromLatin1("yyyy/MM/dd")
<< threeDigitDayIssueKeypresses_Nofixday << QString::fromLatin1("2001/02/28");
QTest::newRow("fixday, leap, 2-digit month, yyyy/MM/dd") << defaultDate << QString::fromLatin1("yyyy/MM/dd")
<< threeDigitDayIssueKeypresses_TwoDigitMonth << QString::fromLatin1("2000/11/30");
QTest::newRow("fixday, leap, yyyy/dd/MM") << defaultDate << QString::fromLatin1("yyyy/dd/MM")
<< threeDigitDayIssueKeypresses_YearDayMonth << QString::fromLatin1("2000/29/02");
QTest::newRow("fixday, leap, yyyy/dd/M") << defaultDate << QString::fromLatin1("yyyy/dd/M")
<< threeDigitDayIssueKeypresses_YearDayMonth << QString::fromLatin1("2000/29/2");
QTest::newRow("fixday, leap, yyyy/d/M") << defaultDate << QString::fromLatin1("yyyy/d/M")
<< threeDigitDayIssueKeypresses_YearDayMonth << QString::fromLatin1("2000/29/2");
QTest::newRow("fixday, leap, yyyy/MMM/dd") << defaultDate << QString::fromLatin1("yyyy/MMM/dd")
<< threeDigitDayIssueKeypresses_ShortMonthName << QString::fromLatin1("2000/Feb/29");
QTest::newRow("fixday, leap, yyyy/MMM/d") << defaultDate << QString::fromLatin1("yyyy/MMM/d")
<< threeDigitDayIssueKeypresses_ShortMonthName << QString::fromLatin1("2000/Feb/29");
QTest::newRow("fixday, leap, yy/MMM/dd") << defaultDate << QString::fromLatin1("yy/MMM/dd")
<< threeDigitDayIssueKeypresses_ShortMonthName << QString::fromLatin1("00/Feb/29");
QTest::newRow("fixday, leap, d/M/yyyy") << defaultDate << QString::fromLatin1("d/M/yyyy")
<< reverseThreeDigitDayIssueKeypresses << QString::fromLatin1("29/2/2000");
QTest::newRow("fixday, leap, dd/MM/yyyy") << defaultDate << QString::fromLatin1("dd/MM/yyyy")
<< reverseThreeDigitDayIssueKeypresses << QString::fromLatin1("29/02/2000");
QTest::newRow("fixday, dd/MM/yyyy") << defaultDate.addYears(1) << QString::fromLatin1("dd/MM/yyyy")
<< reverseThreeDigitDayIssueKeypresses << QString::fromLatin1("28/02/2001");
QTest::newRow("fixday, leap, d/yy/M") << defaultDate << QString::fromLatin1("d/yy/M")
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/00/2");
QTest::newRow("fixday, leap, d/yyyy/M") << defaultDate << QString::fromLatin1("d/yyyy/M")
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/2");
QTest::newRow("fixday, leap, d/yyyy/MM") << defaultDate << QString::fromLatin1("d/yyyy/MM")
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/02");
QTest::newRow("fixday, leap, dd/yy/MM") << defaultDate << QString::fromLatin1("dd/yy/MM")
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/00/02");
QTest::newRow("fixday, leap, dd/yyyy/M") << defaultDate << QString::fromLatin1("dd/yyyy/M")
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/2");
QTest::newRow("fixday, leap, dd/yyyy/MM") << defaultDate << QString::fromLatin1("dd/yyyy/MM")
<< threeDigitDayIssueKeypresses_DayYearMonth << QString::fromLatin1("29/2000/02");
QTest::newRow("fixday, leap, M/d/yy") << defaultDate << QString::fromLatin1("M/d/yy")
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("2/29/00");
QTest::newRow("fixday, leap, M/d/yyyy") << defaultDate << QString::fromLatin1("M/d/yyyy")
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("2/29/2000");
QTest::newRow("fixday, leap, M/dd/yyyy") << defaultDate << QString::fromLatin1("M/dd/yyyy")
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("2/29/2000");
QTest::newRow("fixday, leap, MM/dd/yyyy") << defaultDate << QString::fromLatin1("MM/dd/yyyy")
<< threeDigitDayIssueKeypresses_MonthDayYear << QString::fromLatin1("02/29/2000");
QTest::newRow("fixday, leap, M/yyyy/dd") << defaultDate << QString::fromLatin1("M/yyyy/dd")
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("2/2000/29");
QTest::newRow("fixday, leap, M/yy/dd") << defaultDate << QString::fromLatin1("M/yy/dd")
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("2/00/29");
QTest::newRow("fixday, leap, M/yy/d") << defaultDate << QString::fromLatin1("M/yy/d")
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("2/00/29");
QTest::newRow("fixday, leap, MM/yyyy/dd") << defaultDate << QString::fromLatin1("MM/yyyy/dd")
<< threeDigitDayIssueKeypresses_MonthYearDay << QString::fromLatin1("02/2000/29");
QTest::newRow("fixday, leap, MMM/yy/d") << defaultDate << QString::fromLatin1("MMM/yy/d")
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb/00/29");
QTest::newRow("fixday, leap, MMM/yyyy/d") << defaultDate << QString::fromLatin1("MMM/yyyy/d")
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb/2000/29");
QTest::newRow("fixday, MMM/yyyy/d") << defaultDate.addYears(1) << QString::fromLatin1("MMM/yyyy/d")
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb/2001/28");
QTest::newRow("fixday, leap, MMM/yyyy/dd") << defaultDate << QString::fromLatin1("MMM/yyyy/dd")
<< threeDigitDayIssueKeypresses_ShortMonthName_MonthYearDay << QString::fromLatin1("Feb/2000/29");
}
void tst_QDateTimeEdit::dateEditCorrectSectionSize()
{
QFETCH(QDate, defaultDate);
QFETCH(QString, displayFormat);
QFETCH(KeyPairList, keyPresses);
QFETCH(QString, expectedDisplayString);
QDateEdit edit;
edit.setDate(defaultDate);
edit.setDisplayFormat(displayFormat);
edit.show();
edit.setFocus();
// For some reason, we need to set the selected section for the dd/MM/yyyy tests,
// otherwise the 3 is inserted at the front of 01/01/2000 (301/01/2000), instead of the
// selected text being replaced. This is not an issue for the yyyy/MM/dd format though...
edit.setSelectedSection(edit.sectionAt(0));
foreach (const KeyPair &keyPair, keyPresses)
QTest::keyClick(&edit, keyPair.first, keyPair.second);
QDateTimeEditPrivate* edit_d_ptr(static_cast<QDateTimeEditPrivate*>(qt_widget_private(&edit)));
QCOMPARE(edit_d_ptr->text, expectedDisplayString);
}
#endif
QTEST_MAIN(tst_QDateTimeEdit)
#include "tst_qdatetimeedit.moc"