File indexing completed on 2024-04-28 11:46:06
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 0014 using namespace KUnitConversion; 0015 using namespace std::chrono_literals; 0016 0017 void CategoryTest::initTestCase() 0018 { 0019 QStandardPaths::setTestModeEnabled(true); 0020 } 0021 0022 void CategoryTest::testInfo() 0023 { 0024 UnitCategory cg = c.category(AreaCategory); 0025 QCOMPARE(cg.name(), QStringLiteral("Area")); 0026 QCOMPARE(cg.description(), QStringLiteral("Area")); 0027 QCOMPARE(cg.id(), AreaCategory); 0028 } 0029 0030 void CategoryTest::testUnits() 0031 { 0032 UnitCategory cg = c.category(MassCategory); 0033 QCOMPARE(cg.defaultUnit().symbol(), QStringLiteral("kg")); 0034 QCOMPARE(cg.hasUnit(QStringLiteral("g")), true); 0035 QCOMPARE(cg.unit(QStringLiteral("g")).symbol(), QStringLiteral("g")); 0036 QCOMPARE(cg.unit(Kilogram).symbol(), QStringLiteral("kg")); 0037 QVERIFY(cg.units().size() > 0); 0038 QVERIFY(cg.allUnits().size() > 0); 0039 } 0040 0041 void CategoryTest::testConvert() 0042 { 0043 UnitCategory cg = c.category(LengthCategory); 0044 Value v = cg.convert(Value(3.14, Kilometer), QStringLiteral("m")); 0045 QCOMPARE(v.number(), 3140.0); 0046 v = cg.convert(v, QStringLiteral("cm")); 0047 QCOMPARE(v.number(), 314000.0); 0048 v = cg.convert(v, cg.defaultUnit()); 0049 QCOMPARE(v.number(), 3140.0); 0050 } 0051 0052 void CategoryTest::testInvalid() 0053 { 0054 UnitCategory cg = c.category(CategoryId(99999)); 0055 QCOMPARE(cg.name(), QString()); 0056 cg = c.category(QStringLiteral("don't exist")); 0057 QCOMPARE(cg.name(), QString()); 0058 } 0059 0060 void CategoryTest::testCurrencyTableUpdate() 0061 { 0062 // Remove currency cache to force a download 0063 const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml"); 0064 QFile::remove(cache); 0065 QVERIFY(Currency::lastConversionTableUpdate().isNull()); 0066 0067 UnitCategory category = c.category(CurrencyCategory); 0068 QCOMPARE(category.hasOnlineConversionTable(), true); 0069 { 0070 category.syncConversionTable(std::chrono::seconds::zero()); // no skip period = force update 0071 QVERIFY(!Currency::lastConversionTableUpdate().isNull()); 0072 QDateTime lastUpdate = Currency::lastConversionTableUpdate(); 0073 QVERIFY(lastUpdate.secsTo(QDateTime::currentDateTime()) < std::chrono::seconds(1h).count()); 0074 0075 category.syncConversionTable(1h); 0076 QVERIFY(!Currency::lastConversionTableUpdate().isNull()); 0077 QDateTime newUpdate = Currency::lastConversionTableUpdate(); 0078 QCOMPARE(newUpdate, lastUpdate); 0079 } 0080 } 0081 0082 QTEST_MAIN(CategoryTest) 0083 0084 #include "moc_categorytest.cpp"