File indexing completed on 2024-04-21 14:55:15
0001 /* This file is part of the KDE libraries 0002 Copyright (c) 2005 Thomas Braxton <brax108@cox.net> 0003 Copyright (c) 2007 David Jarvie <djarvie@kde.org> 0004 0005 This library is free software; you can redistribute it and/or 0006 modify it under the terms of the GNU Library General Public 0007 License version 2 as published by the Free Software Foundation. 0008 0009 This library is distributed in the hope that it will be useful, 0010 but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0012 Library General Public License for more details. 0013 0014 You should have received a copy of the GNU Library General Public License 0015 along with this library; see the file COPYING.LIB. If not, write to 0016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0017 Boston, MA 02110-1301, USA. 0018 */ 0019 0020 #include "klocaletest.h" 0021 #include <QTest> 0022 0023 #include "klocale.h" 0024 #include "klocale_p.h" 0025 #include "kconfiggroup.h" 0026 #include "kcalendarsystem.h" 0027 #include "kdayperiod_p.h" 0028 #include "kdatetime.h" 0029 #include "ksystemtimezone.h" 0030 #include <QString> 0031 #include <QDate> 0032 #include <QDBusConnection> 0033 #include <QDBusConnectionInterface> 0034 0035 void setupLocale() 0036 { 0037 qputenv("LC_ALL", "C"); 0038 } 0039 Q_CONSTRUCTOR_FUNCTION(setupLocale) 0040 0041 void 0042 KLocaleTest::initTestCase() 0043 { 0044 QStandardPaths::setTestModeEnabled(true); 0045 0046 KLocale::global()->setCountry(QLatin1String("C"), nullptr); 0047 KLocale::global()->setThousandsSeparator(QLatin1String(",")); 0048 } 0049 0050 void KLocaleTest::languages() 0051 { 0052 QVERIFY(KLocale::global()->installedLanguages().contains("en_US")); 0053 } 0054 0055 void 0056 KLocaleTest::formatNumbers() 0057 { 0058 KLocale locale(*KLocale::global()); 0059 0060 KLocale::global()->setDecimalPlaces(2); 0061 QCOMPARE(locale.formatNumber(70), QString("70.00")); 0062 QCOMPARE(locale.formatNumber(70, 0), QString("70")); 0063 QCOMPARE(locale.formatNumber(70.2), QString("70.20")); 0064 QCOMPARE(locale.formatNumber(70.24), QString("70.24")); 0065 QCOMPARE(locale.formatNumber(70.245), QString("70.25")); 0066 QCOMPARE(locale.formatNumber(1234567.89123456789, 8), 0067 QString("1,234,567.89123457")); 0068 QCOMPARE(locale.formatNumber(1234567.89123456789, 0), QString("1,234,568")); 0069 0070 // Test Grouping 0071 locale.d->setNumericDigitGrouping(QList<int>()); 0072 QCOMPARE(locale.formatNumber(123456789, 0), QString("123456789")); 0073 QCOMPARE(locale.formatNumber(123456789.01), QString("123456789.01")); 0074 locale.d->setNumericDigitGrouping(QList<int>() << 3 << 2); 0075 QCOMPARE(locale.formatNumber(123456789, 0), QString("12,34,56,789")); 0076 QCOMPARE(locale.formatNumber(123456789.01), QString("12,34,56,789.01")); 0077 locale.d->setNumericDigitGrouping(QList<int>() << 3 << -1); 0078 QCOMPARE(locale.formatNumber(123456789, 0), QString("123456,789")); 0079 QCOMPARE(locale.formatNumber(123456789.01), QString("123456,789.01")); 0080 0081 //Test it formats correctly with an empty and space separator. 0082 locale.d->setNumericDigitGrouping(QList<int>() << 3); 0083 QCOMPARE(locale.formatNumber(123456789, 0), QString("123,456,789")); 0084 QCOMPARE(locale.formatNumber(123456789.01), QString("123,456,789.01")); 0085 locale.setThousandsSeparator(QString()); 0086 QCOMPARE(locale.formatNumber(123456789, 0), QString("123456789")); 0087 QCOMPARE(locale.formatNumber(123456789.01), QString("123456789.01")); 0088 locale.setThousandsSeparator(" "); 0089 QCOMPARE(locale.formatNumber(123456789, 0), QString("123 456 789")); 0090 QCOMPARE(locale.formatNumber(123456789.01), QString("123 456 789.01")); 0091 } 0092 0093 void 0094 KLocaleTest::formatNumberStrings() 0095 { 0096 KLocale locale(*KLocale::global()); 0097 0098 KLocale::global()->setDecimalPlaces(2); 0099 QCOMPARE(locale.formatNumber("70"), QString("70.00")); 0100 QCOMPARE(locale.formatNumber("70", true, 2), QString("70.00")); 0101 QCOMPARE(locale.formatNumber("70", true, 0), QString("70")); 0102 QCOMPARE(locale.formatNumber("0.2", true, 1), QString("0.2")); 0103 QCOMPARE(locale.formatNumber("70.9123", true, 0), QString("71")); 0104 QCOMPARE(locale.formatNumber("-70.2", true, 2), QString("-70.20")); 0105 QCOMPARE(locale.formatNumber("+70.24", true, 2), QString("70.24")); 0106 QCOMPARE(locale.formatNumber("70.245", true, 2), QString("70.25")); 0107 QCOMPARE(locale.formatNumber("99.996", true, 2), QString("100.00")); 0108 QCOMPARE(locale.formatNumber("12345678901234567.89123456789", false, 0), 0109 QString("12,345,678,901,234,567.89123456789")); 0110 QCOMPARE(locale.formatNumber("99.9e96", true, 2), QString("99.90e96")); 0111 QCOMPARE(locale.formatNumber("99e", true, 1), QString("99.0")); 0112 QCOMPARE(locale.formatNumber("e2", true, 0), QString("0e2")); 0113 QCOMPARE(locale.formatNumber("1.", true, 1), QString("1.0")); 0114 QCOMPARE(locale.formatNumber("1.", true, 0), QString("1")); 0115 QCOMPARE(locale.formatNumber("1.", false, 1), QString("1.")); // no rounding -> 1. unchanged 0116 QCOMPARE(locale.formatNumber("1.", false, 0), QString("1.")); 0117 QCOMPARE(locale.formatNumber("abcd", true, 2), QString("0.00")); // invalid number 0118 0119 // Test Grouping 0120 locale.d->setNumericDigitGrouping(QList<int>()); 0121 QCOMPARE(locale.formatNumber("123456789", true, 0), QString("123456789")); 0122 QCOMPARE(locale.formatNumber("123456789.01"), QString("123456789.01")); 0123 locale.d->setNumericDigitGrouping(QList<int>() << 3 << 2); 0124 QCOMPARE(locale.formatNumber("123456789", true, 0), QString("12,34,56,789")); 0125 QCOMPARE(locale.formatNumber("123456789.01"), QString("12,34,56,789.01")); 0126 locale.d->setNumericDigitGrouping(QList<int>() << 3 << -1); 0127 QCOMPARE(locale.formatNumber("123456789", true, 0), QString("123456,789")); 0128 QCOMPARE(locale.formatNumber("123456789.01"), QString("123456,789.01")); 0129 0130 //Test it formats correctly with an empty and space separator. 0131 locale.d->setNumericDigitGrouping(QList<int>() << 3); 0132 QCOMPARE(locale.formatNumber("123456789", true, 0), QString("123,456,789")); 0133 QCOMPARE(locale.formatNumber("123456789.01"), QString("123,456,789.01")); 0134 locale.setThousandsSeparator(QString()); 0135 QCOMPARE(locale.formatNumber("123456789", true, 0), QString("123456789")); 0136 QCOMPARE(locale.formatNumber("123456789.01"), QString("123456789.01")); 0137 locale.setThousandsSeparator(" "); 0138 QCOMPARE(locale.formatNumber("123456789", true, 0), QString("123 456 789")); 0139 QCOMPARE(locale.formatNumber("123456789.01"), QString("123 456 789.01")); 0140 } 0141 0142 void 0143 KLocaleTest::readNumber() 0144 { 0145 KLocale locale(*KLocale::global()); 0146 bool ok = false; 0147 0148 locale.readNumber("12,1", &ok); 0149 QVERIFY(!ok); 0150 QCOMPARE(locale.readNumber("12,100", &ok), 12100.0); 0151 QVERIFY(ok); 0152 locale.readNumber("12,100000,00", &ok); 0153 QVERIFY(!ok); 0154 locale.readNumber("12,100000000", &ok); 0155 QVERIFY(!ok); 0156 locale.readNumber("12,,100,000", &ok); 0157 QVERIFY(!ok); 0158 locale.readNumber("12,1000,000", &ok); 0159 QVERIFY(!ok); 0160 locale.readNumber("12,0000000,000", &ok); 0161 QVERIFY(!ok); 0162 locale.readNumber("12,0000000", &ok); 0163 QVERIFY(!ok); 0164 QCOMPARE(locale.readNumber("12,146,131.12", &ok), 12146131.12); 0165 QVERIFY(ok); 0166 QCOMPARE(locale.readNumber("1.12345678912", &ok), 1.12345678912); 0167 QVERIFY(ok); 0168 0169 // Test Grouping 0170 locale.d->setNumericDigitGrouping(QList<int>()); 0171 QCOMPARE(locale.readNumber(QString("123456789"), &ok), 123456789.0); 0172 QVERIFY(ok); 0173 QCOMPARE(locale.readNumber(QString("123456789.01"), &ok), 123456789.01); 0174 QVERIFY(ok); 0175 QCOMPARE(locale.readNumber(QString("123,456,789"), &ok), 0.0); 0176 QVERIFY(!ok); 0177 QCOMPARE(locale.readNumber(QString("123,456,789.01"), &ok), 0.0); 0178 QVERIFY(!ok); 0179 0180 locale.d->setNumericDigitGrouping(QList<int>() << 3 << 2); 0181 QCOMPARE(locale.readNumber(QString("12,34,56,789"), &ok), 123456789.0); 0182 QVERIFY(ok); 0183 QCOMPARE(locale.readNumber(QString("12,34,56,789.01"), &ok), 123456789.01); 0184 QVERIFY(ok); 0185 QCOMPARE(locale.readNumber(QString("123,456,789"), &ok), 0.0); 0186 QVERIFY(!ok); 0187 QCOMPARE(locale.readNumber(QString("123,456,789.01"), &ok), 0.0); 0188 QVERIFY(!ok); 0189 QCOMPARE(locale.readNumber(QString("123456789"), &ok), 123456789.0); 0190 QVERIFY(ok); 0191 QCOMPARE(locale.readNumber(QString("123456789.01"), &ok), 123456789.01); 0192 QVERIFY(ok); 0193 QCOMPARE(locale.readNumber(QString("123456,789"), &ok), 0.0); 0194 QVERIFY(!ok); 0195 QCOMPARE(locale.readNumber(QString("123456,789.01"), &ok), 0.0); 0196 QVERIFY(!ok); 0197 0198 //Test it parses correctly with an empty separator. 0199 locale.d->setNumericDigitGrouping(QList<int>() << 3); 0200 locale.setThousandsSeparator(QString()); 0201 QCOMPARE(locale.readNumber(QString("123456789"), &ok), 123456789.0); 0202 QVERIFY(ok); 0203 QCOMPARE(locale.readNumber(QString("123456789.01"), &ok), 123456789.01); 0204 QVERIFY(ok); 0205 QCOMPARE(locale.readNumber(QString("123,456,789"), &ok), 0.0); 0206 QVERIFY(!ok); 0207 QCOMPARE(locale.readNumber(QString("123,456,789.01"), &ok), 0.0); 0208 QVERIFY(!ok); 0209 0210 //Test it parses correctly with an space separator. 0211 locale.d->setNumericDigitGrouping(QList<int>() << 3); 0212 locale.setThousandsSeparator(" "); 0213 QCOMPARE(locale.readNumber(QString("123 456 789"), &ok), 123456789.0); 0214 QVERIFY(ok); 0215 QCOMPARE(locale.readNumber(QString("123 456 789.01"), &ok), 123456789.01); 0216 QVERIFY(ok); 0217 QCOMPARE(locale.readNumber(QString("123456789"), &ok), 123456789.0); 0218 QVERIFY(ok); 0219 QCOMPARE(locale.readNumber(QString("123456789.01"), &ok), 123456789.01); 0220 QVERIFY(ok); 0221 QCOMPARE(locale.readNumber(QString("123456 789"), &ok), 0.0); 0222 QVERIFY(!ok); 0223 QCOMPARE(locale.readNumber(QString("123456 789.01"), &ok), 0.0); 0224 QVERIFY(!ok); 0225 QCOMPARE(locale.readNumber(QString("123,456,789"), &ok), 0.0); 0226 QVERIFY(!ok); 0227 QCOMPARE(locale.readNumber(QString("123,456,789.01"), &ok), 0.0); 0228 QVERIFY(!ok); 0229 0230 // Test signs 0231 locale.setPositiveSign("@"); 0232 locale.setNegativeSign("&"); 0233 locale.setThousandsSeparator(","); 0234 locale.d->setNumericDigitGrouping(QList<int>() << 3); 0235 0236 QCOMPARE(locale.readNumber(QString("@123,456,789.12"), &ok), 123456789.12); 0237 QVERIFY(ok); 0238 QCOMPARE(locale.readNumber(QString("&123,456,789.12"), &ok), -123456789.12); 0239 QVERIFY(ok); 0240 QCOMPARE(locale.readNumber(QString("123,456,789.12"), &ok), 123456789.12); 0241 QVERIFY(ok); 0242 QCOMPARE(locale.readNumber(QString("+123,456,789.12"), &ok), 0.0); 0243 QVERIFY(!ok); 0244 QCOMPARE(locale.readNumber(QString("-123,456,789.12"), &ok), 0.0); 0245 QVERIFY(!ok); 0246 locale.setNegativeSign(QString()); 0247 QCOMPARE(locale.readNumber(QString("123,456,789.12"), &ok), -123456789.12); 0248 QVERIFY(ok); 0249 QCOMPARE(locale.readNumber(QString("-123,456,789.12"), &ok), 0.0); 0250 QVERIFY(!ok); 0251 } 0252 0253 void KLocaleTest::formatMoney() 0254 { 0255 KLocale locale(*KLocale::global()); 0256 locale.setPositiveSign(QString()); 0257 locale.setNegativeSign("-"); 0258 locale.setPositivePrefixCurrencySymbol(true); 0259 locale.setNegativePrefixCurrencySymbol(true); 0260 locale.setMonetaryDecimalPlaces(2); 0261 locale.setMonetaryThousandsSeparator(","); 0262 locale.setMonetaryDecimalSymbol("."); 0263 locale.setCurrencySymbol("$"); 0264 locale.setPositiveMonetarySignPosition(KLocale::BeforeQuantityMoney); 0265 locale.setNegativeMonetarySignPosition(KLocale::BeforeQuantityMoney); 0266 locale.d->setMonetaryDigitGrouping(QList<int>() << 3); 0267 0268 // Basic grouping, decimal place and rounding tests 0269 QCOMPARE(locale.formatMoney(1), QString("$ 1.00")); 0270 QCOMPARE(locale.formatMoney(21), QString("$ 21.00")); 0271 QCOMPARE(locale.formatMoney(321), QString("$ 321.00")); 0272 QCOMPARE(locale.formatMoney(4321), QString("$ 4,321.00")); 0273 QCOMPARE(locale.formatMoney(54321), QString("$ 54,321.00")); 0274 QCOMPARE(locale.formatMoney(654321), QString("$ 654,321.00")); 0275 QCOMPARE(locale.formatMoney(7654321), QString("$ 7,654,321.00")); 0276 QCOMPARE(locale.formatMoney(87654321), QString("$ 87,654,321.00")); 0277 QCOMPARE(locale.formatMoney(987654321), QString("$ 987,654,321.00")); 0278 0279 QCOMPARE(locale.formatMoney(1.1), QString("$ 1.10")); 0280 QCOMPARE(locale.formatMoney(21.1), QString("$ 21.10")); 0281 QCOMPARE(locale.formatMoney(321.1), QString("$ 321.10")); 0282 QCOMPARE(locale.formatMoney(4321.1), QString("$ 4,321.10")); 0283 QCOMPARE(locale.formatMoney(54321.1), QString("$ 54,321.10")); 0284 QCOMPARE(locale.formatMoney(654321.1), QString("$ 654,321.10")); 0285 QCOMPARE(locale.formatMoney(7654321.1), QString("$ 7,654,321.10")); 0286 QCOMPARE(locale.formatMoney(87654321.1), QString("$ 87,654,321.10")); 0287 QCOMPARE(locale.formatMoney(987654321.1), QString("$ 987,654,321.10")); 0288 0289 QCOMPARE(locale.formatMoney(1.12), QString("$ 1.12")); 0290 QCOMPARE(locale.formatMoney(21.12), QString("$ 21.12")); 0291 QCOMPARE(locale.formatMoney(321.12), QString("$ 321.12")); 0292 QCOMPARE(locale.formatMoney(4321.12), QString("$ 4,321.12")); 0293 QCOMPARE(locale.formatMoney(54321.12), QString("$ 54,321.12")); 0294 QCOMPARE(locale.formatMoney(654321.12), QString("$ 654,321.12")); 0295 QCOMPARE(locale.formatMoney(7654321.12), QString("$ 7,654,321.12")); 0296 QCOMPARE(locale.formatMoney(87654321.12), QString("$ 87,654,321.12")); 0297 QCOMPARE(locale.formatMoney(987654321.12), QString("$ 987,654,321.12")); 0298 0299 QCOMPARE(locale.formatMoney(1.12), QString("$ 1.12")); 0300 QCOMPARE(locale.formatMoney(21.12), QString("$ 21.12")); 0301 QCOMPARE(locale.formatMoney(321.12), QString("$ 321.12")); 0302 QCOMPARE(locale.formatMoney(4321.12), QString("$ 4,321.12")); 0303 QCOMPARE(locale.formatMoney(54321.12), QString("$ 54,321.12")); 0304 QCOMPARE(locale.formatMoney(654321.12), QString("$ 654,321.12")); 0305 QCOMPARE(locale.formatMoney(7654321.12), QString("$ 7,654,321.12")); 0306 QCOMPARE(locale.formatMoney(87654321.12), QString("$ 87,654,321.12")); 0307 QCOMPARE(locale.formatMoney(987654321.12), QString("$ 987,654,321.12")); 0308 0309 QCOMPARE(locale.formatMoney(1.123), QString("$ 1.12")); 0310 QCOMPARE(locale.formatMoney(21.123), QString("$ 21.12")); 0311 QCOMPARE(locale.formatMoney(321.123), QString("$ 321.12")); 0312 QCOMPARE(locale.formatMoney(4321.123), QString("$ 4,321.12")); 0313 QCOMPARE(locale.formatMoney(54321.123), QString("$ 54,321.12")); 0314 QCOMPARE(locale.formatMoney(654321.123), QString("$ 654,321.12")); 0315 QCOMPARE(locale.formatMoney(7654321.123), QString("$ 7,654,321.12")); 0316 QCOMPARE(locale.formatMoney(87654321.123), QString("$ 87,654,321.12")); 0317 QCOMPARE(locale.formatMoney(987654321.123), QString("$ 987,654,321.12")); 0318 0319 QCOMPARE(locale.formatMoney(1.129), QString("$ 1.13")); 0320 QCOMPARE(locale.formatMoney(21.129), QString("$ 21.13")); 0321 QCOMPARE(locale.formatMoney(321.129), QString("$ 321.13")); 0322 QCOMPARE(locale.formatMoney(4321.129), QString("$ 4,321.13")); 0323 QCOMPARE(locale.formatMoney(54321.129), QString("$ 54,321.13")); 0324 QCOMPARE(locale.formatMoney(654321.129), QString("$ 654,321.13")); 0325 QCOMPARE(locale.formatMoney(7654321.129), QString("$ 7,654,321.13")); 0326 QCOMPARE(locale.formatMoney(87654321.129), QString("$ 87,654,321.13")); 0327 QCOMPARE(locale.formatMoney(987654321.129), QString("$ 987,654,321.13")); 0328 0329 QCOMPARE(locale.formatMoney(-1), QString("$ -1.00")); 0330 QCOMPARE(locale.formatMoney(-21), QString("$ -21.00")); 0331 QCOMPARE(locale.formatMoney(-321), QString("$ -321.00")); 0332 QCOMPARE(locale.formatMoney(-4321), QString("$ -4,321.00")); 0333 QCOMPARE(locale.formatMoney(-54321), QString("$ -54,321.00")); 0334 QCOMPARE(locale.formatMoney(-654321), QString("$ -654,321.00")); 0335 QCOMPARE(locale.formatMoney(-7654321), QString("$ -7,654,321.00")); 0336 QCOMPARE(locale.formatMoney(-87654321), QString("$ -87,654,321.00")); 0337 QCOMPARE(locale.formatMoney(-987654321), QString("$ -987,654,321.00")); 0338 0339 QCOMPARE(locale.formatMoney(-1.1), QString("$ -1.10")); 0340 QCOMPARE(locale.formatMoney(-21.1), QString("$ -21.10")); 0341 QCOMPARE(locale.formatMoney(-321.1), QString("$ -321.10")); 0342 QCOMPARE(locale.formatMoney(-4321.1), QString("$ -4,321.10")); 0343 QCOMPARE(locale.formatMoney(-54321.1), QString("$ -54,321.10")); 0344 QCOMPARE(locale.formatMoney(-654321.1), QString("$ -654,321.10")); 0345 QCOMPARE(locale.formatMoney(-7654321.1), QString("$ -7,654,321.10")); 0346 QCOMPARE(locale.formatMoney(-87654321.1), QString("$ -87,654,321.10")); 0347 QCOMPARE(locale.formatMoney(-987654321.1), QString("$ -987,654,321.10")); 0348 0349 QCOMPARE(locale.formatMoney(-1.12), QString("$ -1.12")); 0350 QCOMPARE(locale.formatMoney(-21.12), QString("$ -21.12")); 0351 QCOMPARE(locale.formatMoney(-321.12), QString("$ -321.12")); 0352 QCOMPARE(locale.formatMoney(-4321.12), QString("$ -4,321.12")); 0353 QCOMPARE(locale.formatMoney(-54321.12), QString("$ -54,321.12")); 0354 QCOMPARE(locale.formatMoney(-654321.12), QString("$ -654,321.12")); 0355 QCOMPARE(locale.formatMoney(-7654321.12), QString("$ -7,654,321.12")); 0356 QCOMPARE(locale.formatMoney(-87654321.12), QString("$ -87,654,321.12")); 0357 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ -987,654,321.12")); 0358 0359 QCOMPARE(locale.formatMoney(-1.12), QString("$ -1.12")); 0360 QCOMPARE(locale.formatMoney(-21.12), QString("$ -21.12")); 0361 QCOMPARE(locale.formatMoney(-321.12), QString("$ -321.12")); 0362 QCOMPARE(locale.formatMoney(-4321.12), QString("$ -4,321.12")); 0363 QCOMPARE(locale.formatMoney(-54321.12), QString("$ -54,321.12")); 0364 QCOMPARE(locale.formatMoney(-654321.12), QString("$ -654,321.12")); 0365 QCOMPARE(locale.formatMoney(-7654321.12), QString("$ -7,654,321.12")); 0366 QCOMPARE(locale.formatMoney(-87654321.12), QString("$ -87,654,321.12")); 0367 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ -987,654,321.12")); 0368 0369 QCOMPARE(locale.formatMoney(-1.123), QString("$ -1.12")); 0370 QCOMPARE(locale.formatMoney(-21.123), QString("$ -21.12")); 0371 QCOMPARE(locale.formatMoney(-321.123), QString("$ -321.12")); 0372 QCOMPARE(locale.formatMoney(-4321.123), QString("$ -4,321.12")); 0373 QCOMPARE(locale.formatMoney(-54321.123), QString("$ -54,321.12")); 0374 QCOMPARE(locale.formatMoney(-654321.123), QString("$ -654,321.12")); 0375 QCOMPARE(locale.formatMoney(-7654321.123), QString("$ -7,654,321.12")); 0376 QCOMPARE(locale.formatMoney(-87654321.123), QString("$ -87,654,321.12")); 0377 QCOMPARE(locale.formatMoney(-987654321.123), QString("$ -987,654,321.12")); 0378 0379 QCOMPARE(locale.formatMoney(-1.129), QString("$ -1.13")); 0380 QCOMPARE(locale.formatMoney(-21.129), QString("$ -21.13")); 0381 QCOMPARE(locale.formatMoney(-321.129), QString("$ -321.13")); 0382 QCOMPARE(locale.formatMoney(-4321.129), QString("$ -4,321.13")); 0383 QCOMPARE(locale.formatMoney(-54321.129), QString("$ -54,321.13")); 0384 QCOMPARE(locale.formatMoney(-654321.129), QString("$ -654,321.13")); 0385 QCOMPARE(locale.formatMoney(-7654321.129), QString("$ -7,654,321.13")); 0386 QCOMPARE(locale.formatMoney(-87654321.129), QString("$ -87,654,321.13")); 0387 QCOMPARE(locale.formatMoney(-987654321.129), QString("$ -987,654,321.13")); 0388 0389 // Test override defaults 0390 QCOMPARE(locale.formatMoney(987654321.12, "£", 0), QString("£ 987,654,321")); 0391 QCOMPARE(locale.formatMoney(987654321.12, "USD", 4), QString("USD 987,654,321.1200")); 0392 0393 // Test Grouping 0394 locale.d->setMonetaryDigitGrouping(QList<int>()); 0395 QCOMPARE(locale.formatMoney(987654321.12), QString("$ 987654321.12")); 0396 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ -987654321.12")); 0397 locale.d->setMonetaryDigitGrouping(QList<int>() << 3 << 2); 0398 QCOMPARE(locale.formatMoney(987654321.12), QString("$ 98,76,54,321.12")); 0399 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ -98,76,54,321.12")); 0400 locale.d->setMonetaryDigitGrouping(QList<int>() << 3 << -1); 0401 QCOMPARE(locale.formatMoney(987654321.12), QString("$ 987654,321.12")); 0402 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ -987654,321.12")); 0403 0404 // Test symbol and sign position options 0405 locale.setPositiveSign("+"); 0406 locale.setNegativeSign("-"); 0407 locale.d->setMonetaryDigitGrouping(QList<int>() << 3); 0408 0409 locale.setPositiveMonetarySignPosition(KLocale::ParensAround); 0410 locale.setNegativeMonetarySignPosition(KLocale::ParensAround); 0411 locale.setPositivePrefixCurrencySymbol(true); 0412 locale.setNegativePrefixCurrencySymbol(true); 0413 QCOMPARE(locale.formatMoney(987654321.12), QString("$ (987,654,321.12)")); 0414 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ (987,654,321.12)")); 0415 locale.setPositivePrefixCurrencySymbol(false); 0416 locale.setNegativePrefixCurrencySymbol(false); 0417 QCOMPARE(locale.formatMoney(987654321.12), QString("(987,654,321.12) $")); 0418 QCOMPARE(locale.formatMoney(-987654321.12), QString("(987,654,321.12) $")); 0419 0420 locale.setPositiveMonetarySignPosition(KLocale::BeforeQuantityMoney); 0421 locale.setNegativeMonetarySignPosition(KLocale::BeforeQuantityMoney); 0422 locale.setPositivePrefixCurrencySymbol(true); 0423 locale.setNegativePrefixCurrencySymbol(true); 0424 QCOMPARE(locale.formatMoney(987654321.12), QString("$ +987,654,321.12")); 0425 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ -987,654,321.12")); 0426 locale.setPositivePrefixCurrencySymbol(false); 0427 locale.setNegativePrefixCurrencySymbol(false); 0428 QCOMPARE(locale.formatMoney(987654321.12), QString("+987,654,321.12 $")); 0429 QCOMPARE(locale.formatMoney(-987654321.12), QString("-987,654,321.12 $")); 0430 0431 locale.setPositiveMonetarySignPosition(KLocale::AfterQuantityMoney); 0432 locale.setNegativeMonetarySignPosition(KLocale::AfterQuantityMoney); 0433 locale.setPositivePrefixCurrencySymbol(true); 0434 locale.setNegativePrefixCurrencySymbol(true); 0435 QCOMPARE(locale.formatMoney(987654321.12), QString("$ 987,654,321.12+")); 0436 QCOMPARE(locale.formatMoney(-987654321.12), QString("$ 987,654,321.12-")); 0437 locale.setPositivePrefixCurrencySymbol(false); 0438 locale.setNegativePrefixCurrencySymbol(false); 0439 QCOMPARE(locale.formatMoney(987654321.12), QString("987,654,321.12+ $")); 0440 QCOMPARE(locale.formatMoney(-987654321.12), QString("987,654,321.12- $")); 0441 0442 locale.setPositiveMonetarySignPosition(KLocale::BeforeMoney); 0443 locale.setNegativeMonetarySignPosition(KLocale::BeforeMoney); 0444 locale.setPositivePrefixCurrencySymbol(true); 0445 locale.setNegativePrefixCurrencySymbol(true); 0446 QCOMPARE(locale.formatMoney(987654321.12), QString("+$ 987,654,321.12")); 0447 QCOMPARE(locale.formatMoney(-987654321.12), QString("-$ 987,654,321.12")); 0448 locale.setPositivePrefixCurrencySymbol(false); 0449 locale.setNegativePrefixCurrencySymbol(false); 0450 QCOMPARE(locale.formatMoney(987654321.12), QString("987,654,321.12 +$")); 0451 QCOMPARE(locale.formatMoney(-987654321.12), QString("987,654,321.12 -$")); 0452 0453 locale.setPositiveMonetarySignPosition(KLocale::AfterMoney); 0454 locale.setNegativeMonetarySignPosition(KLocale::AfterMoney); 0455 locale.setPositivePrefixCurrencySymbol(true); 0456 locale.setNegativePrefixCurrencySymbol(true); 0457 QCOMPARE(locale.formatMoney(987654321.12), QString("$+ 987,654,321.12")); 0458 QCOMPARE(locale.formatMoney(-987654321.12), QString("$- 987,654,321.12")); 0459 locale.setPositivePrefixCurrencySymbol(false); 0460 locale.setNegativePrefixCurrencySymbol(false); 0461 QCOMPARE(locale.formatMoney(987654321.12), QString("987,654,321.12 $+")); 0462 QCOMPARE(locale.formatMoney(-987654321.12), QString("987,654,321.12 $-")); 0463 } 0464 0465 void KLocaleTest::readMoney() 0466 { 0467 bool ok = false; 0468 KLocale locale(*KLocale::global()); 0469 locale.setPositiveSign(QString()); 0470 locale.setNegativeSign("-"); 0471 locale.setPositivePrefixCurrencySymbol(true); 0472 locale.setNegativePrefixCurrencySymbol(true); 0473 locale.setMonetaryDecimalPlaces(2); 0474 locale.setMonetaryThousandsSeparator(","); 0475 locale.setMonetaryDecimalSymbol("."); 0476 locale.setCurrencySymbol("$"); 0477 locale.setPositiveMonetarySignPosition(KLocale::BeforeQuantityMoney); 0478 locale.setNegativeMonetarySignPosition(KLocale::BeforeQuantityMoney); 0479 locale.d->setMonetaryDigitGrouping(QList<int>() << 3); 0480 0481 // Basic grouping, decimal place and rounding tests 0482 QCOMPARE(locale.readMoney("$ 1.12", &ok), 1.12); 0483 QVERIFY(ok); 0484 QCOMPARE(locale.readMoney("$ 21.12", &ok), 21.12); 0485 QVERIFY(ok); 0486 QCOMPARE(locale.readMoney("$ 321.12", &ok), 321.12); 0487 QVERIFY(ok); 0488 QCOMPARE(locale.readMoney("$ 4,321.12", &ok), 4321.12); 0489 QVERIFY(ok); 0490 QCOMPARE(locale.readMoney("$ 54,321.12", &ok), 54321.12); 0491 QVERIFY(ok); 0492 QCOMPARE(locale.readMoney("$ 654,321.12", &ok), 654321.12); 0493 QVERIFY(ok); 0494 QCOMPARE(locale.readMoney("$ 7,654,321.12", &ok), 7654321.12); 0495 QVERIFY(ok); 0496 QCOMPARE(locale.readMoney("$ 87,654,321.12", &ok), 87654321.12); 0497 QVERIFY(ok); 0498 QCOMPARE(locale.readMoney("$ 987,654,321.12", &ok), 987654321.12); 0499 QVERIFY(ok); 0500 QCOMPARE(locale.readMoney("$ 987654321.12", &ok), 987654321.12); 0501 QVERIFY(ok); 0502 QCOMPARE(locale.readMoney("$ 987654,321.12", &ok), 0.0); 0503 QVERIFY(!ok); 0504 0505 QCOMPARE(locale.readMoney("$ -1.12", &ok), -1.12); 0506 QVERIFY(ok); 0507 QCOMPARE(locale.readMoney("$ -21.12", &ok), -21.12); 0508 QVERIFY(ok); 0509 QCOMPARE(locale.readMoney("$ -321.12", &ok), -321.12); 0510 QVERIFY(ok); 0511 QCOMPARE(locale.readMoney("$ -4,321.12", &ok), -4321.12); 0512 QVERIFY(ok); 0513 QCOMPARE(locale.readMoney("$ -54,321.12", &ok), -54321.12); 0514 QVERIFY(ok); 0515 QCOMPARE(locale.readMoney("$ -654,321.12", &ok), -654321.12); 0516 QVERIFY(ok); 0517 QCOMPARE(locale.readMoney("$ -7,654,321.12", &ok), -7654321.12); 0518 QVERIFY(ok); 0519 QCOMPARE(locale.readMoney("$ -87,654,321.12", &ok), -87654321.12); 0520 QVERIFY(ok); 0521 QCOMPARE(locale.readMoney("$ -987,654,321.12", &ok), -987654321.12); 0522 QVERIFY(ok); 0523 QCOMPARE(locale.readMoney("$ -987654321.12", &ok), -987654321.12); 0524 QVERIFY(ok); 0525 QCOMPARE(locale.readMoney("$ -987654,321.12", &ok), 0.0); 0526 QVERIFY(!ok); 0527 0528 // Test incomplete formats 0529 QCOMPARE(locale.readMoney("$ 1", &ok), 1.00); 0530 QVERIFY(ok); 0531 QCOMPARE(locale.readMoney("$ 21", &ok), 21.00); 0532 QVERIFY(ok); 0533 QCOMPARE(locale.readMoney("$ 321", &ok), 321.00); 0534 QVERIFY(ok); 0535 QCOMPARE(locale.readMoney("$ 4,321", &ok), 4321.00); 0536 QVERIFY(ok); 0537 QCOMPARE(locale.readMoney("$ 54,321", &ok), 54321.00); 0538 QVERIFY(ok); 0539 QCOMPARE(locale.readMoney("$ 654,321", &ok), 654321.00); 0540 QVERIFY(ok); 0541 QCOMPARE(locale.readMoney("$ 7,654,321", &ok), 7654321.00); 0542 QVERIFY(ok); 0543 QCOMPARE(locale.readMoney("$ 87,654,321", &ok), 87654321.00); 0544 QVERIFY(ok); 0545 QCOMPARE(locale.readMoney("$ 987,654,321", &ok), 987654321.00); 0546 QVERIFY(ok); 0547 0548 // Test Grouping 0549 locale.d->setMonetaryDigitGrouping(QList<int>()); 0550 QCOMPARE(locale.readMoney("$ 987654321.12", &ok), 987654321.12); 0551 QVERIFY(ok); 0552 QCOMPARE(locale.readMoney("$ -987654321.12", &ok), -987654321.12); 0553 QVERIFY(ok); 0554 locale.d->setMonetaryDigitGrouping(QList<int>() << 3 << 2); 0555 QCOMPARE(locale.readMoney("$ 98,76,54,321.12", &ok), 987654321.12); 0556 QVERIFY(ok); 0557 QCOMPARE(locale.readMoney("$ -98,76,54,321.12", &ok), -987654321.12); 0558 QVERIFY(ok); 0559 QCOMPARE(locale.readMoney("$ 987654321.12", &ok), 987654321.12); 0560 QVERIFY(ok); 0561 QCOMPARE(locale.readMoney("$ -987654321.12", &ok), -987654321.12); 0562 QVERIFY(ok); 0563 locale.d->setMonetaryDigitGrouping(QList<int>() << 3 << -1); 0564 QCOMPARE(locale.readMoney("$ 987654,321.12", &ok), 987654321.12); 0565 QVERIFY(ok); 0566 QCOMPARE(locale.readMoney("$ -987654,321.12", &ok), -987654321.12); 0567 QVERIFY(ok); 0568 0569 // Test signs 0570 locale.setPositiveSign("@"); 0571 locale.setNegativeSign("&"); 0572 locale.d->setMonetaryDigitGrouping(QList<int>() << 3); 0573 0574 QCOMPARE(locale.readMoney(QString("$ @123,456,789.12"), &ok), 123456789.12); 0575 QVERIFY(ok); 0576 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12@"), &ok), 123456789.12); 0577 QVERIFY(ok); 0578 QCOMPARE(locale.readMoney(QString("$ &123,456,789.12"), &ok), -123456789.12); 0579 QVERIFY(ok); 0580 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12&"), &ok), -123456789.12); 0581 QVERIFY(ok); 0582 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12"), &ok), 123456789.12); 0583 QVERIFY(ok); 0584 QCOMPARE(locale.readMoney(QString("$ +123,456,789.12"), &ok), 0.0); 0585 QVERIFY(!ok); 0586 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12+"), &ok), 0.0); 0587 QVERIFY(!ok); 0588 QCOMPARE(locale.readMoney(QString("$ -123,456,789.12"), &ok), 0.0); 0589 QVERIFY(!ok); 0590 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12-"), &ok), 0.0); 0591 QVERIFY(!ok); 0592 locale.setNegativeSign(QString()); 0593 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12"), &ok), -123456789.12); 0594 QVERIFY(ok); 0595 QCOMPARE(locale.readMoney(QString("$ -123,456,789.12"), &ok), 0.0); 0596 QVERIFY(!ok); 0597 QCOMPARE(locale.readMoney(QString("$ 123,456,789.12-"), &ok), 0.0); 0598 QVERIFY(!ok); 0599 0600 // Test symbol and sign position options 0601 locale.setPositiveSign("+"); 0602 locale.setNegativeSign("-"); 0603 0604 locale.setPositiveMonetarySignPosition(KLocale::ParensAround); 0605 locale.setNegativeMonetarySignPosition(KLocale::BeforeQuantityMoney); 0606 locale.setPositivePrefixCurrencySymbol(true); 0607 QCOMPARE(locale.readMoney("$ (987,654,321.12)", &ok), 987654321.12); 0608 QVERIFY(ok); 0609 locale.setPositivePrefixCurrencySymbol(false); 0610 QCOMPARE(locale.readMoney("(987,654,321.12) $", &ok), 987654321.12); 0611 QVERIFY(ok); 0612 0613 locale.setPositiveMonetarySignPosition(KLocale::BeforeQuantityMoney); 0614 locale.setNegativeMonetarySignPosition(KLocale::ParensAround); 0615 locale.setNegativePrefixCurrencySymbol(true); 0616 QCOMPARE(locale.readMoney("$ (987,654,321.12)", &ok), -987654321.12); 0617 QVERIFY(ok); 0618 locale.setNegativePrefixCurrencySymbol(false); 0619 QCOMPARE(locale.readMoney("(987,654,321.12) $", &ok), -987654321.12); 0620 QVERIFY(ok); 0621 0622 locale.setPositiveMonetarySignPosition(KLocale::BeforeQuantityMoney); 0623 locale.setNegativeMonetarySignPosition(KLocale::BeforeQuantityMoney); 0624 locale.setPositivePrefixCurrencySymbol(true); 0625 locale.setNegativePrefixCurrencySymbol(true); 0626 QCOMPARE(locale.readMoney("$ +987,654,321.12", &ok), 987654321.12); 0627 QVERIFY(ok); 0628 QCOMPARE(locale.readMoney("$ -987,654,321.12", &ok), -987654321.12); 0629 QVERIFY(ok); 0630 locale.setPositivePrefixCurrencySymbol(false); 0631 locale.setNegativePrefixCurrencySymbol(false); 0632 QCOMPARE(locale.readMoney("+987,654,321.12 $", &ok), 987654321.12); 0633 QVERIFY(ok); 0634 QCOMPARE(locale.readMoney("-987,654,321.12 $", &ok), -987654321.12); 0635 QVERIFY(ok); 0636 0637 locale.setPositiveMonetarySignPosition(KLocale::AfterQuantityMoney); 0638 locale.setNegativeMonetarySignPosition(KLocale::AfterQuantityMoney); 0639 locale.setPositivePrefixCurrencySymbol(true); 0640 locale.setNegativePrefixCurrencySymbol(true); 0641 QCOMPARE(locale.readMoney("$ 987,654,321.12+", &ok), 987654321.12); 0642 QVERIFY(ok); 0643 QCOMPARE(locale.readMoney("$ 987,654,321.12-", &ok), -987654321.12); 0644 QVERIFY(ok); 0645 locale.setPositivePrefixCurrencySymbol(false); 0646 locale.setNegativePrefixCurrencySymbol(false); 0647 QCOMPARE(locale.readMoney("987,654,321.12+ $", &ok), 987654321.12); 0648 QVERIFY(ok); 0649 QCOMPARE(locale.readMoney("987,654,321.12- $", &ok), -987654321.12); 0650 QVERIFY(ok); 0651 0652 locale.setPositiveMonetarySignPosition(KLocale::BeforeMoney); 0653 locale.setNegativeMonetarySignPosition(KLocale::BeforeMoney); 0654 locale.setPositivePrefixCurrencySymbol(true); 0655 locale.setNegativePrefixCurrencySymbol(true); 0656 QCOMPARE(locale.readMoney("+$ 987,654,321.12", &ok), 987654321.12); 0657 QVERIFY(ok); 0658 QCOMPARE(locale.readMoney("-$ 987,654,321.12", &ok), -987654321.12); 0659 QVERIFY(ok); 0660 locale.setPositivePrefixCurrencySymbol(false); 0661 locale.setNegativePrefixCurrencySymbol(false); 0662 QCOMPARE(locale.readMoney("987,654,321.12 +$", &ok), 987654321.12); 0663 QVERIFY(ok); 0664 QCOMPARE(locale.readMoney("987,654,321.12 -$", &ok), -987654321.12); 0665 QVERIFY(ok); 0666 0667 locale.setPositiveMonetarySignPosition(KLocale::AfterMoney); 0668 locale.setNegativeMonetarySignPosition(KLocale::AfterMoney); 0669 locale.setPositivePrefixCurrencySymbol(true); 0670 locale.setNegativePrefixCurrencySymbol(true); 0671 QCOMPARE(locale.readMoney("$+ 987,654,321.12", &ok), 987654321.12); 0672 QVERIFY(ok); 0673 QCOMPARE(locale.readMoney("$- 987,654,321.12", &ok), -987654321.12); 0674 QVERIFY(ok); 0675 locale.setPositivePrefixCurrencySymbol(false); 0676 locale.setNegativePrefixCurrencySymbol(false); 0677 QCOMPARE(locale.readMoney("987,654,321.12 $+", &ok), 987654321.12); 0678 QVERIFY(ok); 0679 QCOMPARE(locale.readMoney("987,654,321.12 $-", &ok), -987654321.12); 0680 QVERIFY(ok); 0681 } 0682 0683 void 0684 KLocaleTest::formatDate() 0685 { 0686 KLocale locale(*KLocale::global()); 0687 QString small("yyyy-MM-dd"); 0688 QString full("dddd dd MMMM yyyy"); 0689 QDate date; 0690 0691 // Ensure that user configuration isn't messing with us; 0692 // shouldn't happen though, due to QStandardPaths::setTestModeEnabled(true) 0693 QCOMPARE(locale.dateFormat(), QString("%A %d %B %Y")); 0694 0695 date.setDate(2002, 5, 3); 0696 QCOMPARE(locale.formatDate(date), date.toString(full)); 0697 QCOMPARE(locale.formatDate(date, KLocale::ShortDate), date.toString(small)); 0698 0699 date = QDate::currentDate(); 0700 QCOMPARE(locale.formatDate(date), date.toString(full)); 0701 QCOMPARE(locale.formatDate(date, KLocale::ShortDate), date.toString(small)); 0702 0703 QCOMPARE(locale.formatDate(date, KLocale::FancyLongDate), QString("Today")); 0704 QCOMPARE(locale.formatDate(date.addDays(-1), KLocale::FancyLongDate), QString("Yesterday")); 0705 QDate dat = date.addDays(-2); 0706 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), locale.calendar()->weekDayName(dat)); 0707 dat = date.addDays(-3); 0708 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), locale.calendar()->weekDayName(dat)); 0709 dat = date.addDays(-4); 0710 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), locale.calendar()->weekDayName(dat)); 0711 dat = date.addDays(-5); 0712 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), locale.calendar()->weekDayName(dat)); 0713 dat = date.addDays(-6); 0714 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), locale.calendar()->weekDayName(dat)); 0715 dat = date.addDays(-7); 0716 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), dat.toString(full)); 0717 dat = date.addDays(1); 0718 QCOMPARE(locale.formatDate(dat, KLocale::FancyLongDate), dat.toString(full)); 0719 } 0720 0721 void 0722 KLocaleTest::readDate() 0723 { 0724 KLocale locale(*KLocale::global()); 0725 QString small("yyyy-MM-dd"); 0726 QString full("dddd dd MMMM yyyy"); 0727 bool ok = false; 0728 QDate date; 0729 date.setDate(2002, 5, 3); 0730 QCOMPARE(locale.readDate(date.toString(small)), date); 0731 QCOMPARE(locale.readDate(date.toString(full)), date); 0732 locale.readDate(date.toString(small), KLocale::NormalFormat, &ok); 0733 QVERIFY(!ok); 0734 locale.readDate(date.toString(full), KLocale::ShortFormat, &ok); 0735 QVERIFY(!ok); 0736 0737 QString twoDigitYear("dd-MM-yy"); 0738 QCOMPARE(date.toString(twoDigitYear), QString("03-05-02")); 0739 QCOMPARE(locale.readDate("03-05-02", "%d-%m-%y"), date); 0740 0741 date = QDate::currentDate(); 0742 QCOMPARE(locale.readDate(date.toString(small)), date); 0743 QCOMPARE(locale.readDate(date.toString(full)), date); 0744 locale.readDate(date.toString(small), KLocale::NormalFormat, &ok); 0745 QVERIFY(!ok); 0746 locale.readDate(date.toString(full), KLocale::ShortFormat, &ok); 0747 QVERIFY(!ok); 0748 0749 locale.readDate("2005-02-31", &ok); 0750 QVERIFY(!ok); 0751 } 0752 0753 void 0754 KLocaleTest::formatTime() 0755 { 0756 KLocale locale(*KLocale::global()); 0757 QTime time(0, 22, 33); 0758 0759 locale.setTimeFormat("%H:%M %p"); 0760 QCOMPARE(locale.formatLocaleTime(time, KLocale::TimeWithoutSeconds), QString("00:22 AM")); 0761 QCOMPARE(locale.formatLocaleTime(time, KLocale::TimeWithoutSeconds | KLocale::TimeDuration), 0762 QString("00:22")); 0763 0764 locale.setTimeFormat("%H:%M:%S %p"); 0765 QCOMPARE(locale.formatLocaleTime(time, KLocale::TimeDefault), QString("00:22:33 AM")); 0766 QCOMPARE(locale.formatLocaleTime(time, KLocale::TimeDuration), QString("00:22:33")); 0767 0768 locale.setTimeFormat("%l : %M : %S %p"); // #164813 0769 QCOMPARE(locale.formatLocaleTime(time, KLocale::TimeDefault), QString("12 : 22 : 33 AM")); 0770 QCOMPARE(locale.formatLocaleTime(time, KLocale::TimeWithoutSeconds), QString("12 : 22 AM")); 0771 } 0772 0773 void 0774 KLocaleTest::formatDateTime() 0775 { 0776 KLocale locale(*KLocale::global()); 0777 QString small("yyyy-MM-dd hh:mm"); 0778 QString smallsecs("yyyy-MM-dd hh:mm:ss"); 0779 QString full("dddd dd MMMM yyyy hh:mm"); 0780 QString fullsecs("dddd dd MMMM yyyy hh:mm:ss"); 0781 QString tfmt(" hh:mm"); 0782 QDateTime qdt; 0783 0784 // Ensure that user configuration isn't messing with us; 0785 // shouldn't happen though, due to QStandardPaths::setTestModeEnabled(true) 0786 QCOMPARE(locale.dateFormat(), QString("%A %d %B %Y")); 0787 0788 qdt = QDateTime(QDate(2002, 5, 3), QTime(10, 20, 30)); 0789 QCOMPARE(locale.formatDateTime(qdt), qdt.toString(small)); 0790 QCOMPARE(locale.formatDateTime(qdt, KLocale::LongDate), qdt.toString(full)); 0791 0792 qdt = QDateTime::currentDateTime(); 0793 QDate today = qdt.date(); 0794 QTime nowt = qdt.time(); 0795 QCOMPARE(locale.formatDateTime(qdt), qdt.toString(small)); 0796 QCOMPARE(locale.formatDateTime(qdt, KLocale::LongDate), qdt.toString(full)); 0797 0798 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString("Today" + qdt.time().toString(tfmt))); 0799 qdt = qdt.addSecs(3605); // more than 1 hour from now 0800 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), qdt.toString(full)); 0801 qdt.setDate(today); 0802 qdt.setTime(QTime(0, 0, 0)); 0803 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString("Today" + qdt.time().toString(tfmt))); 0804 qdt = qdt.addSecs(-1); 0805 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString("Yesterday" + qdt.time().toString(tfmt))); 0806 qdt = qdt.addDays(2); // tomorrow 0807 qdt.setTime(nowt); 0808 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), qdt.toString(full)); 0809 qdt = qdt.addDays(-2); // yesterday 0810 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString("Yesterday" + qdt.time().toString(tfmt))); 0811 qdt = qdt.addDays(-1); 0812 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(qdt.date()) + qdt.time().toString(tfmt))); 0813 qdt = qdt.addDays(-1); 0814 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(qdt.date()) + qdt.time().toString(tfmt))); 0815 qdt = qdt.addDays(-1); 0816 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(qdt.date()) + qdt.time().toString(tfmt))); 0817 qdt = qdt.addDays(-1); 0818 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(qdt.date()) + qdt.time().toString(tfmt))); 0819 qdt = qdt.addDays(-1); 0820 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(qdt.date()) + qdt.time().toString(tfmt))); 0821 qdt = qdt.addDays(-1); 0822 QCOMPARE(locale.formatDateTime(qdt, KLocale::FancyLongDate), qdt.toString(full)); 0823 0824 // The use of KSystemTimeZones requires kded to be running 0825 if (!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kded5")) { 0826 QSKIP("kded not running"); 0827 } 0828 0829 small = "%Y-%m-%d %H:%M"; 0830 smallsecs = "%Y-%m-%d %H:%M:%S"; 0831 full = "%A %d %B %Y %H:%M"; 0832 fullsecs = "%A %d %B %Y %H:%M:%S"; 0833 KDateTime kdt; 0834 const KTimeZone tz = KSystemTimeZones::zone("Pacific/Fiji"); 0835 if (!tz.isValid()) { 0836 QSKIP("Pacific/Fiji timezone not available"); 0837 } 0838 kdt = KDateTime::currentDateTime(tz); 0839 today = kdt.date(); 0840 nowt = kdt.time(); 0841 QCOMPARE(locale.formatDateTime(kdt), kdt.toString(small)); 0842 // QCOMPARE(locale.formatDateTime(kdt, KLocale::ShortDate, KLocale::Seconds), kdt.toString(smallsecs)); 0843 QCOMPARE(locale.formatDateTime(kdt, KLocale::LongDate), kdt.toString(full)); 0844 // QCOMPARE(locale.formatDateTime(kdt, KLocale::LongDate, KLocale::Seconds), kdt.toString(fullsecs)); 0845 0846 // QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString("Today") + kdt.time().toString(tfmt)); 0847 kdt = kdt.addSecs(3605); // more than 1 hour from now 0848 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), kdt.toString(full)); 0849 kdt.setDate(today); 0850 kdt.setTime(QTime(0, 0, 0)); 0851 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString("Today" + kdt.time().toString(tfmt))); 0852 kdt = kdt.addSecs(-1); 0853 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString("Yesterday" + kdt.time().toString(tfmt))); 0854 kdt = kdt.addDays(2); // tomorrow 0855 kdt.setTime(nowt); 0856 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), kdt.toString(full)); 0857 kdt = kdt.addDays(-2); // yesterday 0858 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString("Yesterday" + kdt.time().toString(tfmt))); 0859 kdt = kdt.addDays(-1); 0860 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(kdt.date()) + kdt.time().toString(tfmt))); 0861 kdt = kdt.addDays(-1); 0862 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(kdt.date()) + kdt.time().toString(tfmt))); 0863 kdt = kdt.addDays(-1); 0864 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(kdt.date()) + kdt.time().toString(tfmt))); 0865 kdt = kdt.addDays(-1); 0866 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(kdt.date()) + kdt.time().toString(tfmt))); 0867 kdt = kdt.addDays(-1); 0868 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), QString(locale.calendar()->weekDayName(kdt.date()) + kdt.time().toString(tfmt))); 0869 kdt = kdt.addDays(-1); 0870 QCOMPARE(locale.formatDateTime(kdt, KLocale::FancyLongDate), kdt.toString(full)); 0871 } 0872 0873 void 0874 KLocaleTest::readTime() 0875 { 0876 KLocale locale(*KLocale::global()); 0877 bool ok = false; 0878 0879 QCOMPARE(locale.readTime("11:22:33", &ok), QTime(11, 22, 33)); 0880 QVERIFY(ok); 0881 0882 QCOMPARE(locale.readTime("11:22", &ok), QTime(11, 22, 0)); 0883 QVERIFY(ok); 0884 0885 locale.readLocaleTime("11:22:33", &ok, KLocale::TimeWithoutSeconds); 0886 QVERIFY(!ok); 0887 0888 QCOMPARE(locale.readLocaleTime("11:22", &ok, KLocale::TimeWithoutSeconds), QTime(11, 22, 0)); 0889 QVERIFY(ok); 0890 0891 // strict processing of a time string with a missing space 0892 locale.setTimeFormat("%I:%M:%S %p"); 0893 QString timeString = QString("11:13:55%1").arg(locale.d->dayPeriodForTime(QTime(11, 13, 55)).periodName()); 0894 locale.readLocaleTime(timeString, &ok, KLocale::TimeDefault, KLocale::ProcessStrict); 0895 QVERIFY(!ok); 0896 0897 // lax processing of the same time 0898 QCOMPARE(locale.readLocaleTime(timeString, &ok, KLocale::TimeDefault), QTime(11, 13, 55)); 0899 QVERIFY(ok); 0900 } 0901 0902 void KLocaleTest::testDayPeriods() 0903 { 0904 KLocale locale(*KLocale::global()); 0905 locale.setTimeFormat("%I:%M:%S %p"); 0906 0907 //Test default standard AM/PM Day Periods 0908 KDayPeriod testPeriod; 0909 QCOMPARE(testPeriod.isValid(), false); 0910 testPeriod = locale.d->dayPeriodForTime(QTime(03, 00, 00)); 0911 QCOMPARE(testPeriod.isValid(), true); 0912 QCOMPARE(testPeriod.periodName(KLocale::LongName), QString("Ante Meridiem")); 0913 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("AM")); 0914 QCOMPARE(testPeriod.periodName(KLocale::NarrowName), QString("A")); 0915 QCOMPARE(testPeriod.periodStart(), QTime(0, 0, 0)); 0916 QCOMPARE(testPeriod.periodEnd(), QTime(11, 59, 59, 999)); 0917 QCOMPARE(testPeriod.hourInPeriod(QTime(0, 0, 0)), 12); 0918 QCOMPARE(testPeriod.hourInPeriod(QTime(1, 0, 0)), 1); 0919 QCOMPARE(testPeriod.hourInPeriod(QTime(6, 0, 0)), 6); 0920 QCOMPARE(testPeriod.hourInPeriod(QTime(11, 59, 59, 999)), 11); 0921 QCOMPARE(testPeriod.hourInPeriod(QTime(12, 0, 0)), -1); 0922 QCOMPARE(testPeriod.time(12, 0, 0), QTime(0, 0, 0)); 0923 QCOMPARE(testPeriod.time(1, 0, 0), QTime(1, 0, 0)); 0924 QCOMPARE(testPeriod.time(6, 0, 0), QTime(6, 0, 0)); 0925 QCOMPARE(testPeriod.time(11, 59, 59, 999), QTime(11, 59, 59, 999)); 0926 QCOMPARE(testPeriod.time(13, 0, 0), QTime()); 0927 0928 testPeriod = locale.d->dayPeriodForTime(QTime(13, 00, 00)); 0929 QCOMPARE(testPeriod.isValid(), true); 0930 QCOMPARE(testPeriod.periodName(KLocale::LongName), QString("Post Meridiem")); 0931 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("PM")); 0932 QCOMPARE(testPeriod.periodName(KLocale::NarrowName), QString("P")); 0933 QCOMPARE(testPeriod.periodStart(), QTime(12, 0, 0)); 0934 QCOMPARE(testPeriod.periodEnd(), QTime(23, 59, 59, 999)); 0935 QCOMPARE(testPeriod.hourInPeriod(QTime(11, 59, 59, 999)), -1); 0936 QCOMPARE(testPeriod.hourInPeriod(QTime(12, 0, 0)), 12); 0937 QCOMPARE(testPeriod.hourInPeriod(QTime(13, 0, 0)), 1); 0938 QCOMPARE(testPeriod.hourInPeriod(QTime(18, 0, 0)), 6); 0939 QCOMPARE(testPeriod.hourInPeriod(QTime(23, 59, 59, 999)), 11); 0940 QCOMPARE(testPeriod.hourInPeriod(QTime(24, 0, 0)), -1); 0941 QCOMPARE(testPeriod.time(12, 0, 0), QTime(12, 0, 0)); 0942 QCOMPARE(testPeriod.time(1, 0, 0), QTime(13, 0, 0)); 0943 QCOMPARE(testPeriod.time(6, 0, 0), QTime(18, 0, 0)); 0944 QCOMPARE(testPeriod.time(11, 59, 59, 999), QTime(23, 59, 59, 999)); 0945 QCOMPARE(testPeriod.time(13, 0, 0), QTime()); 0946 0947 QCOMPARE(locale.dayPeriodText(QTime(11, 12, 13)), QString("AM")); 0948 QCOMPARE(locale.dayPeriodText(QTime(23, 12, 13)), QString("PM")); 0949 QCOMPARE(locale.formatLocaleTime(QTime(11, 12, 13)), QString("11:12:13 AM")); 0950 QCOMPARE(locale.formatLocaleTime(QTime(23, 12, 13)), QString("11:12:13 PM")); 0951 QCOMPARE(locale.readLocaleTime(QString("11:12:13 AM")), QTime(11, 12, 13)); 0952 QCOMPARE(locale.readLocaleTime(QString("11:12:13 PM")), QTime(23, 12, 13)); 0953 QCOMPARE(locale.readLocaleTime(QString("11:12:13 am")), QTime(11, 12, 13)); 0954 QCOMPARE(locale.readLocaleTime(QString("11:12:13 pm")), QTime(23, 12, 13)); 0955 0956 // Test setting own periods 0957 // Test alternative periods, e.g. thirds of day with absolute hours in each period numbered 1..8 0958 QList<KDayPeriod> dayPeriods; 0959 dayPeriods.append(KDayPeriod("p1", "Early Day", "Early", "E", QTime(0, 0, 0), QTime(7, 59, 59, 999), 1, 0)); 0960 dayPeriods.append(KDayPeriod("p2", "Middle Day", "Middle", "M", QTime(8, 0, 0), QTime(15, 59, 59, 999), 1, 0)); 0961 dayPeriods.append(KDayPeriod("p3", "Late Day", "Late", "L", QTime(16, 0, 0), QTime(23, 59, 59, 999), 1, 0)); 0962 locale.d->setDayPeriods(dayPeriods); 0963 testPeriod = locale.d->dayPeriodForTime(QTime(0, 0, 0)); 0964 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("Early")); 0965 QCOMPARE(testPeriod.hourInPeriod(QTime(0, 0, 0)), 1); 0966 QCOMPARE(testPeriod.hourInPeriod(QTime(4, 0, 0)), 5); 0967 QCOMPARE(testPeriod.hourInPeriod(QTime(7, 0, 0)), 8); 0968 QCOMPARE(testPeriod.time(0, 0, 0), QTime()); 0969 QCOMPARE(testPeriod.time(1, 0, 0), QTime(0, 0, 0)); 0970 QCOMPARE(testPeriod.time(5, 0, 0), QTime(4, 0, 0)); 0971 QCOMPARE(testPeriod.time(8, 0, 0), QTime(7, 0, 0)); 0972 QCOMPARE(testPeriod.time(9, 0, 0), QTime()); 0973 testPeriod = locale.d->dayPeriodForTime(QTime(8, 0, 0)); 0974 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("Middle")); 0975 QCOMPARE(testPeriod.hourInPeriod(QTime(8, 0, 0)), 1); 0976 QCOMPARE(testPeriod.hourInPeriod(QTime(12, 0, 0)), 5); 0977 QCOMPARE(testPeriod.hourInPeriod(QTime(15, 0, 0)), 8); 0978 QCOMPARE(testPeriod.time(0, 0, 0), QTime()); 0979 QCOMPARE(testPeriod.time(1, 0, 0), QTime(8, 0, 0)); 0980 QCOMPARE(testPeriod.time(5, 0, 0), QTime(12, 0, 0)); 0981 QCOMPARE(testPeriod.time(8, 0, 0), QTime(15, 0, 0)); 0982 QCOMPARE(testPeriod.time(9, 0, 0), QTime()); 0983 testPeriod = locale.d->dayPeriodForTime(QTime(16, 0, 0)); 0984 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("Late")); 0985 QCOMPARE(testPeriod.hourInPeriod(QTime(16, 0, 0)), 1); 0986 QCOMPARE(testPeriod.hourInPeriod(QTime(20, 0, 0)), 5); 0987 QCOMPARE(testPeriod.hourInPeriod(QTime(23, 0, 0)), 8); 0988 QCOMPARE(testPeriod.time(0, 0, 0), QTime()); 0989 QCOMPARE(testPeriod.time(1, 0, 0), QTime(16, 0, 0)); 0990 QCOMPARE(testPeriod.time(5, 0, 0), QTime(20, 0, 0)); 0991 QCOMPARE(testPeriod.time(8, 0, 0), QTime(23, 0, 0)); 0992 QCOMPARE(testPeriod.time(9, 0, 0), QTime()); 0993 QCOMPARE(locale.formatLocaleTime(QTime(4, 0, 0)), QString("05:00:00 Early")); 0994 QCOMPARE(locale.formatLocaleTime(QTime(12, 0, 0)), QString("05:00:00 Middle")); 0995 QCOMPARE(locale.formatLocaleTime(QTime(20, 0, 0)), QString("05:00:00 Late")); 0996 QCOMPARE(locale.readLocaleTime(QString("05:00:00 Early")), QTime(4, 0, 0)); 0997 QCOMPARE(locale.readLocaleTime(QString("05:00:00 Middle")), QTime(12, 0, 0)); 0998 QCOMPARE(locale.readLocaleTime(QString("05:00:00 Late")), QTime(20, 0, 0)); 0999 1000 // Test more conventional alternative periods, e.g. informal periods of day with 12 hour clock 1001 dayPeriods.clear(); 1002 dayPeriods.append(KDayPeriod("morning", "Morning", "in the morning", "M", QTime(6, 0, 0), QTime(11, 59, 59, 999), 6, 12)); 1003 dayPeriods.append(KDayPeriod("noon", "Noon", "noon", "O", QTime(12, 0, 0), QTime(12, 0, 59, 999), 12, 0)); 1004 dayPeriods.append(KDayPeriod("afternoon", "Afternoon", "in the afternoon", "A", QTime(12, 1, 0), QTime(17, 59, 59, 999), 0, 12)); 1005 dayPeriods.append(KDayPeriod("evening", "Evening", "in the evening", "E", QTime(18, 0, 0), QTime(21, 59, 59, 999), 6, 12)); 1006 dayPeriods.append(KDayPeriod("night", "Night", "at night", "N", QTime(22, 0, 0), QTime(5, 59, 59, 999), 10, 12)); 1007 locale.d->setDayPeriods(dayPeriods); 1008 testPeriod = locale.d->dayPeriodForTime(QTime(8, 0, 0)); 1009 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("in the morning")); 1010 QCOMPARE(testPeriod.hourInPeriod(QTime(8, 0, 0)), 8); 1011 QCOMPARE(testPeriod.time(8, 0, 0), QTime(8, 0, 0)); 1012 testPeriod = locale.d->dayPeriodForTime(QTime(12, 0, 0)); 1013 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("noon")); 1014 QCOMPARE(testPeriod.hourInPeriod(QTime(12, 0, 0)), 12); 1015 QCOMPARE(testPeriod.time(12, 0, 0), QTime(12, 0, 0)); 1016 testPeriod = locale.d->dayPeriodForTime(QTime(12, 1, 0)); 1017 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("in the afternoon")); 1018 QCOMPARE(testPeriod.hourInPeriod(QTime(12, 1, 0)), 12); 1019 QCOMPARE(testPeriod.time(12, 1, 0), QTime(12, 1, 0)); 1020 testPeriod = locale.d->dayPeriodForTime(QTime(23, 0, 0)); 1021 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("at night")); 1022 QCOMPARE(testPeriod.hourInPeriod(QTime(23, 0, 0)), 11); 1023 QCOMPARE(testPeriod.hourInPeriod(QTime(0, 0, 0)), 12); 1024 QCOMPARE(testPeriod.hourInPeriod(QTime(1, 0, 0)), 1); 1025 QCOMPARE(testPeriod.time(11, 0, 0), QTime(23, 0, 0)); 1026 QCOMPARE(testPeriod.time(12, 0, 0), QTime(0, 0, 0)); 1027 QCOMPARE(testPeriod.time(1, 0, 0), QTime(1, 0, 0)); 1028 testPeriod = locale.d->dayPeriodForTime(QTime(0, 0, 0)); 1029 QCOMPARE(testPeriod.periodName(KLocale::ShortName), QString("at night")); 1030 QCOMPARE(locale.readLocaleTime(QString("8:00:00 in the morning")), QTime(8, 0, 0)); 1031 QCOMPARE(locale.readLocaleTime(QString("12:00:00 noon")), QTime(12, 0, 0)); 1032 QCOMPARE(locale.readLocaleTime(QString("5:00:00 in the afternoon")), QTime(17, 0, 0)); 1033 QCOMPARE(locale.readLocaleTime(QString("11:00:00 at night")), QTime(23, 0, 0)); 1034 QCOMPARE(locale.readLocaleTime(QString("1:00:00 at night")), QTime(1, 0, 0)); 1035 locale.setTimeFormat("%l %p"); 1036 QCOMPARE(locale.formatLocaleTime(QTime(8, 0, 0)), QString("8 in the morning")); 1037 QCOMPARE(locale.formatLocaleTime(QTime(12, 0, 0)), QString("12 noon")); 1038 QCOMPARE(locale.formatLocaleTime(QTime(17, 0, 0)), QString("5 in the afternoon")); 1039 QCOMPARE(locale.formatLocaleTime(QTime(23, 0, 0)), QString("11 at night")); 1040 QCOMPARE(locale.formatLocaleTime(QTime(1, 0, 0)), QString("1 at night")); 1041 1042 // Test load config 1043 KConfig *testConfig = new KConfig(QString(), KConfig::SimpleConfig); 1044 KConfigGroup testGroup(testConfig, "Locale"); 1045 testGroup.writeEntry("DayPeriod1", 1046 QStringList() << "third1" << "First Third" << "T1" << "T" << 1047 QTime(0, 0, 0).toString("HH:mm:ss.zzz") << QTime(7, 59, 59, 999).toString("HH:mm:ss.zzz") << 1048 QString::number(0) << QString::number(12)); 1049 testGroup.writeEntry("DayPeriod2", 1050 QStringList() << "third2" << "Second Third" << "T2" << "S" << 1051 QTime(8, 0, 0).toString("HH:mm:ss.zzz") << QTime(15, 59, 59, 999).toString("HH:mm:ss.zzz") << 1052 QString::number(8) << QString::number(12)); 1053 testGroup.writeEntry("DayPeriod3", 1054 QStringList() << "third3" << "First Third" << "T3" << "R" << 1055 QTime(16, 0, 0).toString("HH:mm:ss.zzz") << QTime(23, 59, 59, 999).toString("HH:mm:ss.zzz") << 1056 QString::number(4) << QString::number(12)); 1057 locale = KLocale("en_us", "us", testConfig); 1058 QCOMPARE(locale.d->dayPeriodForTime(QTime(1, 0, 0)).periodName(KLocale::ShortName), QString("T1")); 1059 QCOMPARE(locale.d->dayPeriodForTime(QTime(11, 0, 0)).periodName(KLocale::ShortName), QString("T2")); 1060 QCOMPARE(locale.d->dayPeriodForTime(QTime(21, 0, 0)).periodName(KLocale::ShortName), QString("T3")); 1061 } 1062 1063 void KLocaleTest::testCalendarSystemType() 1064 { 1065 KLocale locale(*KLocale::global()); 1066 1067 locale.setCalendar("gregorian"); 1068 QCOMPARE(locale.calendarSystem(), KLocale::GregorianCalendar); 1069 QCOMPARE(locale.calendarType(), QString("gregorian")); 1070 1071 locale.setCalendar("coptic"); 1072 QCOMPARE(locale.calendarSystem(), KLocale::CopticCalendar); 1073 QCOMPARE(locale.calendarType(), QString("coptic")); 1074 1075 locale.setCalendar("ethiopian"); 1076 QCOMPARE(locale.calendarSystem(), KLocale::EthiopianCalendar); 1077 QCOMPARE(locale.calendarType(), QString("ethiopian")); 1078 1079 locale.setCalendar("hebrew"); 1080 QCOMPARE(locale.calendarSystem(), KLocale::HebrewCalendar); 1081 QCOMPARE(locale.calendarType(), QString("hebrew")); 1082 1083 locale.setCalendar("hijri"); 1084 QCOMPARE(locale.calendarSystem(), KLocale::IslamicCivilCalendar); 1085 QCOMPARE(locale.calendarType(), QString("hijri")); 1086 1087 locale.setCalendar("indian-national"); 1088 QCOMPARE(locale.calendarSystem(), KLocale::IndianNationalCalendar); 1089 QCOMPARE(locale.calendarType(), QString("indian-national")); 1090 1091 locale.setCalendar("jalali"); 1092 QCOMPARE(locale.calendarSystem(), KLocale::JalaliCalendar); 1093 QCOMPARE(locale.calendarType(), QString("jalali")); 1094 1095 locale.setCalendar("japanese"); 1096 QCOMPARE(locale.calendarSystem(), KLocale::JapaneseCalendar); 1097 QCOMPARE(locale.calendarType(), QString("japanese")); 1098 1099 locale.setCalendar("julian"); 1100 QCOMPARE(locale.calendarSystem(), KLocale::JulianCalendar); 1101 QCOMPARE(locale.calendarType(), QString("julian")); 1102 1103 locale.setCalendar("minguo"); 1104 QCOMPARE(locale.calendarSystem(), KLocale::MinguoCalendar); 1105 QCOMPARE(locale.calendarType(), QString("minguo")); 1106 1107 locale.setCalendar("thai"); 1108 QCOMPARE(locale.calendarSystem(), KLocale::ThaiCalendar); 1109 QCOMPARE(locale.calendarType(), QString("thai")); 1110 1111 locale.setCalendarSystem(KLocale::GregorianCalendar); 1112 QCOMPARE(locale.calendarSystem(), KLocale::GregorianCalendar); 1113 QCOMPARE(locale.calendarType(), QString("gregorian")); 1114 1115 locale.setCalendarSystem(KLocale::CopticCalendar); 1116 QCOMPARE(locale.calendarSystem(), KLocale::CopticCalendar); 1117 QCOMPARE(locale.calendarType(), QString("coptic")); 1118 1119 locale.setCalendarSystem(KLocale::EthiopianCalendar); 1120 QCOMPARE(locale.calendarSystem(), KLocale::EthiopianCalendar); 1121 QCOMPARE(locale.calendarType(), QString("ethiopian")); 1122 1123 locale.setCalendarSystem(KLocale::HebrewCalendar); 1124 QCOMPARE(locale.calendarSystem(), KLocale::HebrewCalendar); 1125 QCOMPARE(locale.calendarType(), QString("hebrew")); 1126 1127 locale.setCalendarSystem(KLocale::IslamicCivilCalendar); 1128 QCOMPARE(locale.calendarSystem(), KLocale::IslamicCivilCalendar); 1129 QCOMPARE(locale.calendarType(), QString("hijri")); 1130 1131 locale.setCalendarSystem(KLocale::IndianNationalCalendar); 1132 QCOMPARE(locale.calendarSystem(), KLocale::IndianNationalCalendar); 1133 QCOMPARE(locale.calendarType(), QString("indian-national")); 1134 1135 locale.setCalendarSystem(KLocale::JalaliCalendar); 1136 QCOMPARE(locale.calendarSystem(), KLocale::JalaliCalendar); 1137 QCOMPARE(locale.calendarType(), QString("jalali")); 1138 1139 locale.setCalendarSystem(KLocale::JapaneseCalendar); 1140 QCOMPARE(locale.calendarSystem(), KLocale::JapaneseCalendar); 1141 QCOMPARE(locale.calendarType(), QString("japanese")); 1142 1143 locale.setCalendarSystem(KLocale::JulianCalendar); 1144 QCOMPARE(locale.calendarSystem(), KLocale::JulianCalendar); 1145 QCOMPARE(locale.calendarType(), QString("julian")); 1146 1147 locale.setCalendarSystem(KLocale::MinguoCalendar); 1148 QCOMPARE(locale.calendarSystem(), KLocale::MinguoCalendar); 1149 QCOMPARE(locale.calendarType(), QString("minguo")); 1150 1151 locale.setCalendarSystem(KLocale::ThaiCalendar); 1152 QCOMPARE(locale.calendarSystem(), KLocale::ThaiCalendar); 1153 QCOMPARE(locale.calendarType(), QString("thai")); 1154 1155 locale.setCalendarSystem(KLocale::QDateCalendar); 1156 QCOMPARE(locale.calendarSystem(), KLocale::GregorianCalendar); 1157 QCOMPARE(locale.calendarType(), QString("gregorian")); 1158 } 1159 1160 void KLocaleTest::testCountryDivision() 1161 { 1162 KLocale locale(*KLocale::global()); 1163 QCOMPARE(locale.countryDivisionCode(), locale.country().toUpper()); 1164 QVERIFY(locale.setCountryDivisionCode("US-NY")); 1165 QCOMPARE(locale.countryDivisionCode(), QString("US-NY")); 1166 } 1167 1168 void 1169 KLocaleTest::prettyFormatDuration() 1170 { 1171 KLocale locale(*KLocale::global()); 1172 1173 QCOMPARE(locale.prettyFormatDuration(1000), QString("1 second")); 1174 QCOMPARE(locale.prettyFormatDuration(5000), QString("5 seconds")); 1175 QCOMPARE(locale.prettyFormatDuration(60000), QString("1 minute")); 1176 QCOMPARE(locale.prettyFormatDuration(300000), QString("5 minutes")); 1177 QCOMPARE(locale.prettyFormatDuration(3600000), QString("1 hour")); 1178 QCOMPARE(locale.prettyFormatDuration(18000000), QString("5 hours")); 1179 QCOMPARE(locale.prettyFormatDuration(75000), QString("1 minute and 15 seconds")); 1180 // Problematic case #1 (there is a reference to this case on klocale.cpp) 1181 QCOMPARE(locale.prettyFormatDuration(119999), QString("2 minutes")); 1182 // This case is strictly 2 hours, 15 minutes and 59 seconds. However, since the range is 1183 // pretty high between hours and seconds, prettyFormatDuration always omits seconds when there 1184 // are hours in scene. 1185 QCOMPARE(locale.prettyFormatDuration(8159000), QString("2 hours and 15 minutes")); 1186 // This case is strictly 1 hour and 10 seconds. For the same reason, prettyFormatDuration 1187 // detects that 10 seconds is just garbage compared to 1 hour, and omits it on the result. 1188 QCOMPARE(locale.prettyFormatDuration(3610000), QString("1 hour")); 1189 } 1190 1191 void 1192 KLocaleTest::formatByteSize() 1193 { 1194 KLocale locale(*KLocale::global()); 1195 1196 QCOMPARE(locale.formatByteSize(0), QString("0 B")); 1197 QCOMPARE(locale.formatByteSize(50), QString("50 B")); 1198 QCOMPARE(locale.formatByteSize(500), QString("500 B")); 1199 QCOMPARE(locale.formatByteSize(5000), QString("4.9 KiB")); 1200 QCOMPARE(locale.formatByteSize(50000), QString("48.8 KiB")); 1201 QCOMPARE(locale.formatByteSize(500000), QString("488.3 KiB")); 1202 QCOMPARE(locale.formatByteSize(5000000), QString("4.8 MiB")); 1203 QCOMPARE(locale.formatByteSize(50000000), QString("47.7 MiB")); 1204 QCOMPARE(locale.formatByteSize(500000000), QString("476.8 MiB")); 1205 #if (__WORDSIZE == 64) || defined (_LP64) || defined(__LP64__) || defined(__ILP64__) 1206 QCOMPARE(locale.formatByteSize(5000000000), QString("4.7 GiB")); 1207 QCOMPARE(locale.formatByteSize(50000000000), QString("46.6 GiB")); 1208 QCOMPARE(locale.formatByteSize(500000000000), QString("465.7 GiB")); 1209 QCOMPARE(locale.formatByteSize(5000000000000), QString("4.5 TiB")); 1210 QCOMPARE(locale.formatByteSize(50000000000000), QString("45.5 TiB")); 1211 QCOMPARE(locale.formatByteSize(500000000000000), QString("454.7 TiB")); 1212 #endif 1213 } 1214 1215 void 1216 KLocaleTest::bug95511() 1217 { 1218 KLocale locale(*KLocale::global()); 1219 bool ok = false; 1220 1221 locale.setCurrencySymbol("$$"); 1222 QCOMPARE(locale.readMoney("1,234,567,890.12$$", &ok), 1234567890.12); 1223 QVERIFY(ok); 1224 QCOMPARE(locale.readMoney("-1,234,567,890.12$$", &ok), -1234567890.12); 1225 QVERIFY(ok); 1226 1227 locale.setCurrencySymbol("dollars"); 1228 QCOMPARE(locale.readMoney("12,345,678,901,234,567 dollars", &ok), 1229 12345678901234567.00); 1230 QVERIFY(ok); 1231 QCOMPARE(locale.readMoney("-12,345,678,901.00 dollars", &ok), 1232 -12345678901.00); 1233 QVERIFY(ok); 1234 } 1235 1236 void KLocaleTest::weekDays() 1237 { 1238 KLocale locale(*KLocale::global()); 1239 1240 //Test setting of weekStartDay 1241 locale.setWeekStartDay(3); 1242 QCOMPARE(locale.weekStartDay(), 3); 1243 locale.setWeekStartDay(0); 1244 QCOMPARE(locale.weekStartDay(), 3); 1245 locale.setWeekStartDay(8); 1246 QCOMPARE(locale.weekStartDay(), 3); 1247 1248 //Test setting of workingWeekStartDay 1249 locale.setWorkingWeekStartDay(3); 1250 locale.setWorkingWeekEndDay(6); 1251 QCOMPARE(locale.workingWeekStartDay(), 3); 1252 locale.setWorkingWeekStartDay(0); 1253 QCOMPARE(locale.workingWeekStartDay(), 3); 1254 locale.setWorkingWeekStartDay(8); 1255 QCOMPARE(locale.workingWeekStartDay(), 3); 1256 1257 //Test setting of workingWeekEndDay 1258 locale.setWorkingWeekStartDay(3); 1259 locale.setWorkingWeekEndDay(6); 1260 QCOMPARE(locale.workingWeekEndDay(), 6); 1261 locale.setWorkingWeekEndDay(0); 1262 QCOMPARE(locale.workingWeekEndDay(), 6); 1263 locale.setWorkingWeekEndDay(8); 1264 QCOMPARE(locale.workingWeekEndDay(), 6); 1265 1266 //Test setting of weekStartDay 1267 locale.setWeekDayOfPray(3); 1268 QCOMPARE(locale.weekDayOfPray(), 3); 1269 locale.setWeekDayOfPray(-1); 1270 QCOMPARE(locale.weekDayOfPray(), 3); 1271 locale.setWeekDayOfPray(8); 1272 QCOMPARE(locale.weekDayOfPray(), 3); 1273 locale.setWeekDayOfPray(0); 1274 QCOMPARE(locale.weekDayOfPray(), 0); 1275 } 1276 1277 void 1278 KLocaleTest::formatByteSize2() 1279 { 1280 KLocale locale(*KLocale::global()); 1281 1282 // IEC is also default 1283 locale.setBinaryUnitDialect(KLocale::IECBinaryDialect); 1284 QCOMPARE(locale.binaryUnitDialect(), KLocale::IECBinaryDialect); 1285 1286 QCOMPARE(locale.formatByteSize(1024.0), QString("1.0 KiB")); 1287 QCOMPARE(locale.formatByteSize(1023.0), QString("1,023 B")); 1288 QCOMPARE(locale.formatByteSize(1163000.0), QString("1.1 MiB")); // 1.2 metric 1289 1290 QCOMPARE(locale.formatByteSize(-1024.0), QString("-1.0 KiB")); 1291 QCOMPARE(locale.formatByteSize(-1023.0), QString("-1,023 B")); 1292 QCOMPARE(locale.formatByteSize(-1163000.0), QString("-1.1 MiB")); // 1.2 metric 1293 1294 locale.setBinaryUnitDialect(KLocale::JEDECBinaryDialect); 1295 QCOMPARE(locale.binaryUnitDialect(), KLocale::JEDECBinaryDialect); 1296 1297 QCOMPARE(locale.formatByteSize(1024.0), QString("1.0 KB")); 1298 QCOMPARE(locale.formatByteSize(1023.0), QString("1,023 B")); 1299 QCOMPARE(locale.formatByteSize(1163000.0), QString("1.1 MB")); 1300 1301 QCOMPARE(locale.formatByteSize(-1024.0), QString("-1.0 KB")); 1302 QCOMPARE(locale.formatByteSize(-1023.0), QString("-1,023 B")); 1303 QCOMPARE(locale.formatByteSize(-1163000.0), QString("-1.1 MB")); 1304 1305 locale.setBinaryUnitDialect(KLocale::MetricBinaryDialect); 1306 QCOMPARE(locale.binaryUnitDialect(), KLocale::MetricBinaryDialect); 1307 1308 QCOMPARE(locale.formatByteSize(1024.0), QString("1.0 kB")); 1309 QCOMPARE(locale.formatByteSize(1023.0), QString("1.0 kB")); 1310 QCOMPARE(locale.formatByteSize(1163000.0), QString("1.2 MB")); 1311 1312 QCOMPARE(locale.formatByteSize(-1024.0), QString("-1.0 kB")); 1313 QCOMPARE(locale.formatByteSize(-1023.0), QString("-1.0 kB")); 1314 QCOMPARE(locale.formatByteSize(-1163000.0), QString("-1.2 MB")); 1315 1316 // Ensure specific dialects work, still on metric by default 1317 QCOMPARE(locale.formatByteSize(1024.0, 1, KLocale::JEDECBinaryDialect), QString("1.0 KB")); 1318 QCOMPARE(locale.formatByteSize(2097152.0, 1, KLocale::IECBinaryDialect), QString("2.0 MiB")); 1319 1320 locale.setBinaryUnitDialect(KLocale::JEDECBinaryDialect); 1321 QCOMPARE(locale.binaryUnitDialect(), KLocale::JEDECBinaryDialect); 1322 QCOMPARE(locale.formatByteSize(2097152.0, 1, KLocale::MetricBinaryDialect), QString("2.1 MB")); 1323 1324 // Ensure all units are represented (still in JEDEC mode) 1325 QCOMPARE(locale.formatByteSize(2.0e9, 1, KLocale::MetricBinaryDialect), QString("2.0 GB")); 1326 QCOMPARE(locale.formatByteSize(3.2e12, 1, KLocale::MetricBinaryDialect), QString("3.2 TB")); 1327 QCOMPARE(locale.formatByteSize(4.1e15, 1, KLocale::MetricBinaryDialect), QString("4.1 PB")); 1328 QCOMPARE(locale.formatByteSize(6.7e18, 2, KLocale::MetricBinaryDialect), QString("6.70 EB")); 1329 QCOMPARE(locale.formatByteSize(5.6e20, 2, KLocale::MetricBinaryDialect), QString("560.00 EB")); 1330 QCOMPARE(locale.formatByteSize(2.3e22, 2, KLocale::MetricBinaryDialect), QString("23.00 ZB")); 1331 QCOMPARE(locale.formatByteSize(1.0e27, 1, KLocale::MetricBinaryDialect), QString("1,000.0 YB")); 1332 1333 // Spattering of specific units 1334 QCOMPARE(locale.formatByteSize(823000, 3, KLocale::IECBinaryDialect, KLocale::UnitMegaByte), QString("0.785 MiB")); 1335 QCOMPARE(locale.formatByteSize(1234034.0, 4, KLocale::JEDECBinaryDialect, KLocale::UnitByte), QString("1,234,034 B")); 1336 } 1337 1338 QTEST_MAIN(KLocaleTest) 1339 1340 #include "moc_klocaletest.cpp"