File indexing completed on 2024-04-28 05:50:05

0001 /*
0002  * SPDX-License-Identifier: GPL-3.0-or-later
0003  * SPDX-FileCopyrightText: 2019-2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
0004  */
0005 
0006 #include "validators/countervalidator.h"
0007 
0008 #include <QObject>
0009 #include <QTest>
0010 #include <QValidator>
0011 #include <QtDebug>
0012 
0013 Q_DECLARE_METATYPE(std::optional<qulonglong>);
0014 Q_DECLARE_METATYPE(QLocale);
0015 
0016 class UnsignedLongParsingSamplesTest: public QObject
0017 {
0018     Q_OBJECT
0019 private Q_SLOTS:
0020     void testParseUnsignedInteger(void);
0021     void testParseUnsignedInteger_data(void);
0022 };
0023 
0024 
0025 void UnsignedLongParsingSamplesTest::testParseUnsignedInteger(void)
0026 {
0027     QFETCH(QString, input);
0028     QFETCH(QLocale, locale);
0029     QTEST(validators::parseUnsignedInteger(input, locale), "result");
0030 }
0031 
0032 static void define_test_case(const QString &input, const QLocale &locale, const std::optional<qulonglong> &result)
0033 {
0034     QTest::newRow(qPrintable(input)) << input << locale << result;
0035 }
0036 
0037 void UnsignedLongParsingSamplesTest::testParseUnsignedInteger_data(void)
0038 {
0039     QTest::addColumn<QString>("input");
0040     QTest::addColumn<QLocale>("locale");
0041     QTest::addColumn<std::optional<qulonglong>>("result");
0042 
0043     QLocale frFR(QLocale::French, QLocale::France);
0044     QLocale nlNL(QLocale::Dutch, QLocale::Netherlands);
0045     QLocale enUK(QLocale::English, QLocale::UnitedKingdom);
0046 
0047     define_test_case(QLatin1String("123456"), frFR, std::optional<qulonglong>(123'456ULL));
0048     define_test_case(QLatin1String("123 456"), frFR, std::optional<qulonglong>(123'456ULL));
0049 
0050     define_test_case(QLatin1String("12 3456"), frFR, std::nullopt);
0051     define_test_case(QLatin1String("1234 56"), frFR, std::nullopt);
0052     define_test_case(QLatin1String("12345 6"), frFR, std::nullopt);
0053 
0054     define_test_case(QLatin1String("123.456"), nlNL, std::optional<qulonglong>(123'456ULL));
0055     define_test_case(QLatin1String("123,456"), enUK, std::optional<qulonglong>(123'456ULL));
0056 }
0057 
0058 QTEST_APPLESS_MAIN(UnsignedLongParsingSamplesTest)
0059 
0060 #include "unsigned-long-parsing.moc"