/* * SPDX-License-Identifier: GPL-3.0-or-later * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk */ #include "model/accounts.h" #include #include #include #include class MillisecondsLeftForTokenTest: public QObject { Q_OBJECT private Q_SLOTS: void testMillisecondsLeftForToken(void); void testMillisecondsLeftForToken_data(void); }; static void define_test_case(const char *testCase, const QDateTime &epoch, uint timeStep, qint64 now, qint64 left) { QTest::newRow(qPrintable(QLatin1String(testCase))) << epoch << timeStep << now << left; } void MillisecondsLeftForTokenTest::testMillisecondsLeftForToken(void) { QFETCH(QDateTime, epoch); QFETCH(uint, timeStep); QFETCH(qint64, now); const std::function clock([now](void) -> qint64 { return now; }); QTEST(model::millisecondsLeftForToken(epoch, timeStep, clock), "left"); } void MillisecondsLeftForTokenTest::testMillisecondsLeftForToken_data(void) { QTest::addColumn("epoch"); QTest::addColumn("timeStep"); QTest::addColumn("now"); QTest::addColumn("left"); define_test_case("at the epoch itself", QDateTime::fromMSecsSinceEpoch(0), 30U, 0LL, 30LL * 1000LL); const QString withLeftToGo(QLatin1String("with %1ms left to go")); for (qint64 left = 1000LL; left > 0; --left) { QTest::newRow(qPrintable(withLeftToGo.arg(left))) << QDateTime::fromMSecsSinceEpoch(0) << 1U << 1000LL - left << left; } define_test_case("at the start of 'next' token", QDateTime::fromMSecsSinceEpoch(0), 30U, 30LL * 1000LL, 30LL * 1000LL); define_test_case("using a non-standard epoch (in the past)", QDateTime::fromMSecsSinceEpoch(15LL * 1000LL), 30U, 30LL * 1000LL, 15LL * 1000LL); define_test_case("using a non-standard epoch (in the future)", QDateTime::fromMSecsSinceEpoch(25LL * 1000LL), 30U, 0LL, 25LL * 1000LL); } QTEST_APPLESS_MAIN(MillisecondsLeftForTokenTest) #include "milliseconds-left-for-token.moc"