File indexing completed on 2024-04-21 03:58:29
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Petri Damstén <damu@iki.fi> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "categorytest.h" 0008 #include <QStandardPaths> 0009 #include <chrono> 0010 #include <currency_p.h> 0011 #include <kunitconversion/unitcategory.h> 0012 #include <unitcategory_p.h> 0013 #include <QSignalSpy> 0014 0015 using namespace KUnitConversion; 0016 using namespace std::chrono_literals; 0017 0018 void CategoryTest::initTestCase() 0019 { 0020 QStandardPaths::setTestModeEnabled(true); 0021 } 0022 0023 void CategoryTest::testInfo() 0024 { 0025 UnitCategory cg = c.category(AreaCategory); 0026 QCOMPARE(cg.name(), QStringLiteral("Area")); 0027 QCOMPARE(cg.description(), QStringLiteral("Area")); 0028 QCOMPARE(cg.id(), AreaCategory); 0029 } 0030 0031 void CategoryTest::testUnits() 0032 { 0033 UnitCategory cg = c.category(MassCategory); 0034 QCOMPARE(cg.defaultUnit().symbol(), QStringLiteral("kg")); 0035 QCOMPARE(cg.hasUnit(QStringLiteral("g")), true); 0036 QCOMPARE(cg.unit(QStringLiteral("g")).symbol(), QStringLiteral("g")); 0037 QCOMPARE(cg.unit(Kilogram).symbol(), QStringLiteral("kg")); 0038 QVERIFY(cg.units().size() > 0); 0039 QVERIFY(cg.allUnits().size() > 0); 0040 } 0041 0042 void CategoryTest::testConvert() 0043 { 0044 UnitCategory cg = c.category(LengthCategory); 0045 Value v = cg.convert(Value(3.14, Kilometer), QStringLiteral("m")); 0046 QCOMPARE(v.number(), 3140.0); 0047 v = cg.convert(v, QStringLiteral("cm")); 0048 QCOMPARE(v.number(), 314000.0); 0049 v = cg.convert(v, cg.defaultUnit()); 0050 QCOMPARE(v.number(), 3140.0); 0051 } 0052 0053 void CategoryTest::testInvalid() 0054 { 0055 UnitCategory cg = c.category(CategoryId(99999)); 0056 QCOMPARE(cg.name(), QString()); 0057 cg = c.category(QStringLiteral("don't exist")); 0058 QCOMPARE(cg.name(), QString()); 0059 } 0060 0061 void CategoryTest::testCurrencyTableUpdate() 0062 { 0063 // Remove currency cache to force a download 0064 const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml"); 0065 QFile::remove(cache); 0066 QVERIFY(Currency::lastConversionTableUpdate().isNull()); 0067 0068 UnitCategory category = c.category(CurrencyCategory); 0069 QCOMPARE(category.hasOnlineConversionTable(), true); 0070 { 0071 auto job = category.syncConversionTable(std::chrono::seconds::zero()); // no skip period = force update 0072 QSignalSpy finishedSpy(job, &UpdateJob::finished); 0073 finishedSpy.wait(); 0074 0075 QVERIFY(!Currency::lastConversionTableUpdate().isNull()); 0076 QDateTime lastUpdate = Currency::lastConversionTableUpdate(); 0077 QVERIFY(lastUpdate.secsTo(QDateTime::currentDateTime()) < std::chrono::seconds(1h).count()); 0078 0079 QCOMPARE(category.syncConversionTable(1h), nullptr); 0080 QVERIFY(!Currency::lastConversionTableUpdate().isNull()); 0081 QDateTime newUpdate = Currency::lastConversionTableUpdate(); 0082 QCOMPARE(newUpdate, lastUpdate); 0083 } 0084 } 0085 0086 QTEST_MAIN(CategoryTest) 0087 0088 #include "moc_categorytest.cpp"