From 83fce1931f055498c29bb23951c1f5da264fb4f9 Mon Sep 17 00:00:00 2001 From: Andreas Buhr Date: Fri, 2 Oct 2020 10:06:56 +0200 Subject: 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 --- tests/auto/corelib/time/CMakeLists.txt | 1 + tests/auto/corelib/time/qdatetimeparser/.gitignore | 1 + .../corelib/time/qdatetimeparser/CMakeLists.txt | 10 +++ .../time/qdatetimeparser/qdatetimeparser.pro | 4 ++ .../time/qdatetimeparser/tst_qdatetimeparser.cpp | 72 ++++++++++++++++++++++ tests/auto/corelib/time/time.pro | 1 + 6 files changed, 89 insertions(+) create mode 100644 tests/auto/corelib/time/qdatetimeparser/.gitignore create mode 100644 tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt create mode 100644 tests/auto/corelib/time/qdatetimeparser/qdatetimeparser.pro create mode 100644 tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp (limited to 'tests/auto') 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 +#include + +class tst_QDateTimeParser : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void intermediateYear_data(); + void intermediateYear(); +}; + +void tst_QDateTimeParser::intermediateYear_data() +{ + QTest::addColumn("format"); + QTest::addColumn("input"); + QTest::addColumn("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 -- cgit v1.2.3