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

0001 /*
0002  * SPDX-License-Identifier: GPL-3.0-or-later
0003  * SPDX-FileCopyrightText: 2019 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
0004  */
0005 
0006 #include "test-util.h"
0007 
0008 #include "validators/countervalidator.h"
0009 
0010 using namespace validators::test;
0011 
0012 static QLocale frFR(QLocale::French, QLocale::France);
0013 static QLocale nlNL(QLocale::Dutch, QLocale::Netherlands);
0014 static QLocale enUK(QLocale::English, QLocale::UnitedKingdom);
0015 
0016 /*
0017  * French is weird.
0018  * Or at least the QLocale for France is definitely inconsistent.
0019  * Sometimes you get 123\u00A0456, sometimes you get 123\202f\456...
0020  */
0021 static const QString french = frFR.toString(123456ULL);
0022 static const QString french2 = frFR.toString(12345ULL);
0023 
0024 static void define_valid_table(void)
0025 {
0026     define_test_case(QLatin1String("42"), QLatin1String("42"), QValidator::Acceptable);
0027     define_test_case(QLatin1String("\r \n\t42\r\t \n"), QLatin1String("42"), QValidator::Acceptable);
0028 
0029     define_test_case(QLatin1String("33  "), QLatin1String("33"), QValidator::Acceptable);
0030     define_test_case(QLatin1String("2 2"), QLatin1String("22"), QValidator::Invalid);
0031     define_test_case(QLatin1String("2\t\r\n2"), QLatin1String("22"), QValidator::Invalid);
0032 
0033     define_test_case(QLatin1String("123,456"), QLatin1String("123456"), QValidator::Acceptable, QLocale::c());
0034 
0035     define_test_case(QLatin1String("123456"), QLatin1String("123,456"), QValidator::Acceptable, enUK);
0036     define_test_case(QLatin1String("123,456"), QLatin1String("123,456"), QValidator::Acceptable, enUK);
0037     define_test_case(QLatin1String("123 456"), QLatin1String("123,456"), QValidator::Invalid, enUK);
0038 
0039     define_test_case(QLatin1String("123456"), QLatin1String("123.456"), QValidator::Acceptable, nlNL);
0040     define_test_case(QLatin1String("123.456"), QLatin1String("123.456"), QValidator::Acceptable, nlNL);
0041     define_test_case(QLatin1String("123 456"), QLatin1String("123.456"), QValidator::Invalid, nlNL);
0042     define_test_case(QLatin1String("123,456"), QLatin1String("123.456"), QValidator::Acceptable, nlNL);
0043 
0044     define_test_case(french, french, QValidator::Acceptable, frFR);
0045     define_test_case(QLatin1String("123456"), french, QValidator::Acceptable, frFR);
0046     define_test_case(QLatin1String("123,456"), french, QValidator::Acceptable, frFR);
0047     define_test_case(QLatin1String("123 456"), french, QValidator::Acceptable, frFR);
0048     define_test_case(QLatin1String("123 45"), french2, QValidator::Invalid, frFR);
0049 }
0050 
0051 static void define_empty_table(void)
0052 {
0053     define_test_case(QLatin1String(""), QLatin1String(""), QValidator::Intermediate);
0054     define_test_case(QLatin1String("  "), QLatin1String(""), QValidator::Invalid);
0055     define_test_case(QLatin1String("\t"), QLatin1String(""), QValidator::Invalid);
0056     define_test_case(QLatin1String("\r\n"), QLatin1String(""), QValidator::Invalid);
0057 }
0058 
0059 /*
0060  * Due to how the UnsignedLongValidator works fixup() is always called and fixup()
0061  * never yields outright invalid output
0062  *
0063  * As a result it is not needed to maintain separate input samples for
0064  * both fixup() and validate().
0065  */
0066 
0067 static void define_data(void)
0068 {
0069     define_empty_table();
0070     define_valid_table();
0071 
0072     define_test_case(QLatin1String("-33"), QLatin1String("-33"), QValidator::Invalid);
0073     define_test_case(QLatin1String("ZZ9 Plural Z Alpha"), QLatin1String("ZZ9PluralZAlpha"), QValidator::Invalid);
0074 
0075     define_test_case(QLatin1String("123.456"), QLatin1String("123.456"), QValidator::Invalid, frFR);
0076     define_test_case(QLatin1String("123.456"), QLatin1String("123.456"), QValidator::Invalid, enUK);
0077     define_test_case(QLatin1String("123.456"), QLatin1String("123.456"), QValidator::Invalid, QLocale::c());
0078     define_test_case(french, french, QValidator::Invalid, enUK);
0079     define_test_case(french, french, QValidator::Invalid, nlNL);
0080 }
0081 
0082 DEFINE_VALIDATOR_TEST(UnsignedLongValidatorTest, validators::UnsignedLongValidator, define_data);
0083 
0084 QTEST_APPLESS_MAIN(UnsignedLongValidatorTest)
0085 
0086 #include "unsigned-long-validator.moc"