/*
 Time formatting tests

 Copyright (c) 2012 - 2016, Victor Zverovich
 All rights reserved.

 For the license information refer to format.h.
 */

#include "gmock/gmock.h"
#include "fmt/time.h"

TEST(TimeTest, Format) {
  std::tm tm = std::tm();
  tm.tm_year = 116;
  tm.tm_mon  = 3;
  tm.tm_mday = 25;
  EXPECT_EQ("The date is 2016-04-25.",
            fmt::format("The date is {:%Y-%m-%d}.", tm));
}

TEST(TimeTest, GrowBuffer) {
  std::string s = "{:";
  for (int i = 0; i < 30; ++i)
    s += "%c";
  s += "}\n";
  std::time_t t = std::time(0);
  fmt::format(s, *std::localtime(&t));
}

TEST(TimeTest, EmptyResult) {
  EXPECT_EQ("", fmt::format("{}", std::tm()));
}

bool EqualTime(const std::tm &lhs, const std::tm &rhs) {
  return lhs.tm_sec == rhs.tm_sec &&
         lhs.tm_min == rhs.tm_min &&
         lhs.tm_hour == rhs.tm_hour &&
         lhs.tm_mday == rhs.tm_mday &&
         lhs.tm_mon == rhs.tm_mon &&
         lhs.tm_year == rhs.tm_year &&
         lhs.tm_wday == rhs.tm_wday &&
         lhs.tm_yday == rhs.tm_yday &&
         lhs.tm_isdst == rhs.tm_isdst;
}

TEST(TimeTest, LocalTime) {
  std::time_t t = std::time(0);
  std::tm tm = *std::localtime(&t);
  EXPECT_TRUE(EqualTime(tm, fmt::localtime(t)));
}

TEST(TimeTest, GMTime) {
  std::time_t t = std::time(0);
  std::tm tm = *std::gmtime(&t);
  EXPECT_TRUE(EqualTime(tm, fmt::gmtime(t)));
}
