#include "date_format.h" #include #include #include using namespace radiantwave::datetime; class DateFormatTest : public ::testing::Test { protected: static void SetUpTestSuite() { setenv("TZ", "UTC", 1); tzset(); } }; TEST_F(DateFormatTest, DefaultFormatConstant) { EXPECT_STREQ(DEFAULT_DATE_FORMAT, "%m/%d/%Y"); } TEST_F(DateFormatTest, FormatsKnownTimestamp) { std::tm tm = {}; tm.tm_year = 2026 - 1900; tm.tm_mon = 8 - 1; tm.tm_mday = 4; tm.tm_hour = 14; tm.tm_min = 23; tm.tm_sec = 45; tm.tm_isdst = -1; time_t t = mktime(&tm); ASSERT_NE(t, static_cast(-1)); EXPECT_EQ(formatDate(t, "%m/%d/%Y"), "08/04/2026"); EXPECT_EQ(formatDate(t, "%d/%m/%Y"), "04/08/2026"); EXPECT_EQ(formatDate(t, "%Y-%m-%d"), "2026-08-04"); EXPECT_EQ(formatDate(t, "%m.%d.%Y"), "08.04.2026"); EXPECT_EQ(formatDate(t, "%d.%m.%Y"), "04.08.2026"); EXPECT_EQ(formatDate(t, "%B %d, %Y"), "August 04, 2026"); EXPECT_EQ(formatDate(t, "%d %B %Y"), "04 August 2026"); } TEST_F(DateFormatTest, FormatsTime) { std::tm tm = {}; tm.tm_year = 2026 - 1900; tm.tm_mon = 8 - 1; tm.tm_mday = 4; tm.tm_hour = 14; tm.tm_min = 23; tm.tm_sec = 45; tm.tm_isdst = -1; time_t t = mktime(&tm); ASSERT_NE(t, static_cast(-1)); EXPECT_EQ(formatTime(t), "14:23:45"); } TEST_F(DateFormatTest, OptionsIncludeDefault) { auto options = getDateFormatOptions(); ASSERT_FALSE(options.empty()); EXPECT_EQ(options[0].pattern, std::string(DEFAULT_DATE_FORMAT)); EXPECT_EQ(options[0].name, "Month/Day/Year"); }