Files
espchrono/test/espchronotestutils.h
2023-02-27 17:27:04 +01:00

90 lines
2.4 KiB
C++

#pragma once
#include <QMetaType>
#include <QtTest>
#include <chrono>
#include <string>
#include <date/date.h>
#include "espchrono.h"
#include "cpputilstestutils.h"
Q_DECLARE_METATYPE(std::chrono::microseconds)
Q_DECLARE_METATYPE(std::chrono::milliseconds)
Q_DECLARE_METATYPE(std::chrono::seconds)
Q_DECLARE_METATYPE(std::chrono::minutes)
Q_DECLARE_METATYPE(std::chrono::hours)
Q_DECLARE_METATYPE(espchrono::milliseconds32)
Q_DECLARE_METATYPE(espchrono::seconds32)
Q_DECLARE_METATYPE(espchrono::minutes32)
Q_DECLARE_METATYPE(espchrono::hours32)
Q_DECLARE_METATYPE(espchrono::millis_clock::time_point)
Q_DECLARE_METATYPE(espchrono::utc_clock::time_point)
Q_DECLARE_METATYPE(espchrono::local_clock::time_point)
Q_DECLARE_METATYPE(espchrono::DateTime)
Q_DECLARE_METATYPE(espchrono::LocalDateTime)
using X = std::expected<espchrono::seconds32, std::string>;
Q_DECLARE_METATYPE(X)
extern const espchrono::time_zone testTimeZone;
extern espchrono::millis_clock::time_point mockedMillisClock;
extern espchrono::utc_clock::time_point mockedUtcClock;
namespace {
template<typename T>
espchrono::local_clock::time_point makeLocal(T day, espchrono::minutes32 time, bool dst = false)
{
espchrono::local_clock::time_point localTime{date::sys_days{day}.time_since_epoch(), testTimeZone, dst};
localTime += time;
return localTime;
}
template<typename T>
espchrono::utc_clock::time_point makeUtcFromLocal(T day, espchrono::minutes32 time, bool dst = false)
{
const auto localTime = makeLocal(day, time, dst);
return espchrono::localToUtc(localTime);
}
} // namespace
namespace QTest {
template<>
char *toString(const espchrono::DateTime &dateTime);
template<>
char *toString(const espchrono::LocalDateTime &dateTime);
template<>
char *toString(const std::chrono::microseconds &duration);
template<>
char *toString(const std::chrono::milliseconds &duration);
template<>
char *toString(const std::chrono::seconds &duration);
template<>
char *toString(const std::chrono::minutes &duration);
template<>
char *toString(const std::chrono::hours &duration);
template<>
char *toString(const espchrono::millis_clock::time_point &ts);
template<>
char *toString(const espchrono::utc_clock::time_point &ts);
template<>
char *toString(const espchrono::local_clock::time_point &ts);
template<>
char *toString(const espchrono::seconds32 &val);
template<>
char *toString(const std::expected<espchrono::seconds32, std::string> &val);
} // namespace QTest