diff options
author | Andreas Buhr <andreas.buhr@qt.io> | 2020-10-02 10:06:56 +0200 |
---|---|---|
committer | Andreas Buhr <andreas.buhr@qt.io> | 2020-10-23 20:33:18 +0200 |
commit | 83fce1931f055498c29bb23951c1f5da264fb4f9 (patch) | |
tree | 5a9c35bce46a2d9ccda732f187b5a64ecba15b99 /tests/auto | |
parent | 85e4e5bacf0030573359be8de2ea984d541fdbd5 (diff) |
Add unit tests for qdatetimeparser
The qdatetimeparser was not tested explicitly so far, but only
implicitly in tst_qdate / tst_qdatetime / tst_qdatetimeedit etc.
This made it difficult to test some corner cases, especially in the
context of unfinished dates, i.e. dates which are invalid, but could
become valid by adding more characters. This is used to validate
user input in qdatetimeedit.
Task-number: QTBUG-84334
Change-Id: I27202849abb1b7cad96d3e25f7ac81ce85272b2a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto')
6 files changed, 89 insertions, 0 deletions
diff --git a/tests/auto/corelib/time/CMakeLists.txt b/tests/auto/corelib/time/CMakeLists.txt index b099b32469..e861a1ac71 100644 --- a/tests/auto/corelib/time/CMakeLists.txt +++ b/tests/auto/corelib/time/CMakeLists.txt @@ -3,6 +3,7 @@ add_subdirectory(qcalendar) add_subdirectory(qdate) add_subdirectory(qdatetime) +add_subdirectory(qdatetimeparser) add_subdirectory(qtime) if(QT_FEATURE_timezone) add_subdirectory(qtimezone) diff --git a/tests/auto/corelib/time/qdatetimeparser/.gitignore b/tests/auto/corelib/time/qdatetimeparser/.gitignore new file mode 100644 index 0000000000..880d073ac8 --- /dev/null +++ b/tests/auto/corelib/time/qdatetimeparser/.gitignore @@ -0,0 +1 @@ +tst_qdatetimeparser diff --git a/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt b/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt new file mode 100644 index 0000000000..df9fe43958 --- /dev/null +++ b/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt @@ -0,0 +1,10 @@ +##################################################################### +## tst_qdatetimeparser Test: +##################################################################### + +qt_internal_add_test(tst_qdatetimeparser + SOURCES + tst_qdatetimeparser.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate +) diff --git a/tests/auto/corelib/time/qdatetimeparser/qdatetimeparser.pro b/tests/auto/corelib/time/qdatetimeparser/qdatetimeparser.pro new file mode 100644 index 0000000000..76431b04b0 --- /dev/null +++ b/tests/auto/corelib/time/qdatetimeparser/qdatetimeparser.pro @@ -0,0 +1,4 @@ +CONFIG += testcase +TARGET = tst_qdatetimeparser +QT = core-private testlib +SOURCES = tst_qdatetimeparser.cpp diff --git a/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp b/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp new file mode 100644 index 0000000000..c6490c6158 --- /dev/null +++ b/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QtTest> +#include <private/qdatetimeparser_p.h> + +class tst_QDateTimeParser : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void intermediateYear_data(); + void intermediateYear(); +}; + +void tst_QDateTimeParser::intermediateYear_data() +{ + QTest::addColumn<QString>("format"); + QTest::addColumn<QString>("input"); + QTest::addColumn<QDate>("expected"); + + QTest::newRow("short-year-begin") + << "yyyy_MM_dd" << "200_12_15" << QDate(200, 12, 15); + QTest::newRow("short-year-mid") + << "MM_yyyy_dd" << "12_200_15" << QDate(200, 12, 15); + QTest::newRow("short-year-end") + << "MM_dd_yyyy" << "12_15_200" << QDate(200, 12, 15); +} + +void tst_QDateTimeParser::intermediateYear() +{ + QFETCH(QString, format); + QFETCH(QString, input); + QFETCH(QDate, expected); + + QDateTimeParser testParser(QMetaType::QDateTime, QDateTimeParser::DateTimeEdit); + + QVERIFY(testParser.parseFormat(format)); + + QDateTime val(QDate(1900, 1, 1).startOfDay()); + const QDateTimeParser::StateNode tmp = testParser.parse(input, -1, val, false); + QCOMPARE(tmp.state, QDateTimeParser::Intermediate); + QCOMPARE(tmp.value, expected.startOfDay()); +} + +QTEST_APPLESS_MAIN(tst_QDateTimeParser) + +#include "tst_qdatetimeparser.moc" diff --git a/tests/auto/corelib/time/time.pro b/tests/auto/corelib/time/time.pro index c917587fe7..78217e582e 100644 --- a/tests/auto/corelib/time/time.pro +++ b/tests/auto/corelib/time/time.pro @@ -3,5 +3,6 @@ SUBDIRS = \ qcalendar \ qdate \ qdatetime \ + qdatetimeparser \ qtime qtConfig(timezone): SUBDIRS += qtimezone |