mirror of
https://github.com/whoahq/whoa.git
synced 2026-02-01 08:12:44 +03:00
191 lines
5.2 KiB
C++
191 lines
5.2 KiB
C++
#include "util/time/WowTime.hpp"
|
|
#include "catch.hpp"
|
|
#include "storm/String.hpp"
|
|
|
|
TEST_CASE("WowTime::WowTime", "[util]") {
|
|
SECTION("constructs correctly") {
|
|
WowTime time;
|
|
|
|
CHECK(time.m_minute == -1);
|
|
CHECK(time.m_hour == -1);
|
|
CHECK(time.m_weekday == -1);
|
|
CHECK(time.m_monthday == -1);
|
|
CHECK(time.m_month == -1);
|
|
CHECK(time.m_year == -1);
|
|
CHECK(time.m_flags == 0x0);
|
|
CHECK(time.m_holidayOffset == 0);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("WowTime::WowDecodeTime", "[util]") {
|
|
SECTION("decodes 1234567890 as expected") {
|
|
uint32_t value = 1234567890;
|
|
WowTime time;
|
|
|
|
WowTime::WowDecodeTime(value, &time.m_minute, &time.m_hour, &time.m_weekday, &time.m_monthday, &time.m_month, &time.m_year, &time.m_flags);
|
|
|
|
CHECK(time.m_minute == 18);
|
|
CHECK(time.m_hour == 11);
|
|
CHECK(time.m_weekday == 0);
|
|
CHECK(time.m_monthday == 24);
|
|
CHECK(time.m_month == 9);
|
|
CHECK(time.m_year == 9);
|
|
CHECK(time.m_flags == 0x2);
|
|
}
|
|
|
|
SECTION("decodes 0xFFFFFFFF as expected") {
|
|
uint32_t value = 0xFFFFFFFF;
|
|
WowTime time;
|
|
|
|
WowTime::WowDecodeTime(value, &time.m_minute, &time.m_hour, &time.m_weekday, &time.m_monthday, &time.m_month, &time.m_year, &time.m_flags);
|
|
|
|
CHECK(time.m_minute == -1);
|
|
CHECK(time.m_hour == -1);
|
|
CHECK(time.m_weekday == -1);
|
|
CHECK(time.m_monthday == -1);
|
|
CHECK(time.m_month == -1);
|
|
CHECK(time.m_year == -1);
|
|
CHECK(time.m_flags == -1);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("WowTime::WowEncodeTime", "[util]") {
|
|
SECTION("encodes 10/25/2009 (Sun) 11:18 with flag 0x2 set as expected") {
|
|
uint32_t value = 0;
|
|
|
|
WowTime time;
|
|
time.m_minute = 18;
|
|
time.m_hour = 11;
|
|
time.m_weekday = 0;
|
|
time.m_monthday = 24;
|
|
time.m_month = 9;
|
|
time.m_year = 9;
|
|
time.m_flags = 0x2;
|
|
|
|
WowTime::WowEncodeTime(value, &time);
|
|
|
|
REQUIRE(value == 1234567890);
|
|
}
|
|
|
|
SECTION("encodes empty time as expected") {
|
|
uint32_t value = 0;
|
|
WowTime time;
|
|
|
|
WowTime::WowEncodeTime(value, &time);
|
|
|
|
REQUIRE(value == 0x1FFFFFFF);
|
|
}
|
|
|
|
SECTION("encodes, decodes, and reencodes as expected") {
|
|
uint32_t value = 0;
|
|
|
|
WowTime time1;
|
|
time1.m_minute = 18;
|
|
time1.m_hour = 11;
|
|
time1.m_weekday = 0;
|
|
time1.m_monthday = 24;
|
|
time1.m_month = 9;
|
|
time1.m_year = 9;
|
|
time1.m_flags = 0x2;
|
|
|
|
WowTime time2;
|
|
|
|
CHECK(time2.m_minute != time1.m_minute);
|
|
CHECK(time2.m_hour != time1.m_hour);
|
|
CHECK(time2.m_weekday != time1.m_weekday);
|
|
CHECK(time2.m_monthday != time1.m_monthday);
|
|
CHECK(time2.m_month != time1.m_month);
|
|
CHECK(time2.m_year != time1.m_year);
|
|
CHECK(time2.m_flags != time1.m_flags);
|
|
|
|
WowTime::WowEncodeTime(value, &time1);
|
|
WowTime::WowDecodeTime(value, &time2);
|
|
|
|
CHECK(time2.m_minute == time1.m_minute);
|
|
CHECK(time2.m_hour == time1.m_hour);
|
|
CHECK(time2.m_weekday == time1.m_weekday);
|
|
CHECK(time2.m_monthday == time1.m_monthday);
|
|
CHECK(time2.m_month == time1.m_month);
|
|
CHECK(time2.m_year == time1.m_year);
|
|
CHECK(time2.m_flags == time1.m_flags);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("WowTime::WowGetTimeString", "[util]") {
|
|
SECTION("gets expected string") {
|
|
WowTime time;
|
|
time.m_minute = 18;
|
|
time.m_hour = 11;
|
|
time.m_weekday = 0;
|
|
time.m_monthday = 24;
|
|
time.m_month = 9;
|
|
time.m_year = 9;
|
|
time.m_flags = 0x2;
|
|
|
|
char buf[128];
|
|
auto timeStr = WowTime::WowGetTimeString(&time, buf, sizeof(buf));
|
|
|
|
REQUIRE(!SStrCmp(timeStr, "10/25/2009 (Sun) 11:18"));
|
|
}
|
|
}
|
|
|
|
TEST_CASE("WowTime::AddDays", "[util]") {
|
|
SECTION("adds 1 day to 1/28/2026") {
|
|
WowTime time;
|
|
time.m_minute = 18;
|
|
time.m_hour = 11;
|
|
time.m_weekday = 3;
|
|
time.m_monthday = 27;
|
|
time.m_month = 0;
|
|
time.m_year = 26;
|
|
|
|
time.AddDays(1, false);
|
|
|
|
CHECK(time.m_minute == 18);
|
|
CHECK(time.m_hour == 11);
|
|
CHECK(time.m_weekday == 4);
|
|
CHECK(time.m_monthday == 28);
|
|
CHECK(time.m_month == 0);
|
|
CHECK(time.m_year == 26);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("WowTime::GetHourAndMinutes", "[util]") {
|
|
SECTION("gets expected hour and minutes for default constructed time") {
|
|
WowTime time;
|
|
|
|
REQUIRE(time.GetHourAndMinutes() == 0);
|
|
}
|
|
|
|
SECTION("gets expected hour and minutes for 11:18") {
|
|
WowTime time;
|
|
time.m_minute = 18;
|
|
time.m_hour = 11;
|
|
|
|
REQUIRE(time.GetHourAndMinutes() == 11 * 60 + 18);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("WowTime::SetHourAndMinutes", "[util]") {
|
|
SECTION("sets expected hour and minutes for 11:18") {
|
|
WowTime time;
|
|
time.SetHourAndMinutes(11 * 60 + 18);
|
|
|
|
CHECK(time.m_hour == 11);
|
|
CHECK(time.m_minute == 18);
|
|
|
|
time.SetHourAndMinutes(11, 18);
|
|
|
|
CHECK(time.m_hour == 11);
|
|
CHECK(time.m_minute == 18);
|
|
}
|
|
|
|
SECTION("does not set invalid hour and minutes") {
|
|
WowTime time;
|
|
|
|
CHECK(time.SetHourAndMinutes(25, 61) == 0);
|
|
CHECK(time.m_hour == -1);
|
|
CHECK(time.m_minute == -1);
|
|
}
|
|
}
|