11a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich/*
21a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich Time formatting tests
31a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich
41a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich Copyright (c) 2012 - 2016, Victor Zverovich
51a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich All rights reserved.
61a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich
71a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich For the license information refer to format.h.
81a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich */
91a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich
101a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich#include "gmock/gmock.h"
111a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich#include "fmt/time.h"
121a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich
131a23f9c274071a91edde9fc28895c45940d4e90dVictor ZverovichTEST(TimeTest, Format) {
141a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  std::tm tm = std::tm();
151a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  tm.tm_year = 116;
161a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  tm.tm_mon  = 3;
171a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  tm.tm_mday = 25;
181a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  EXPECT_EQ("The date is 2016-04-25.",
191a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich            fmt::format("The date is {:%Y-%m-%d}.", tm));
201a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich}
211a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich
221a23f9c274071a91edde9fc28895c45940d4e90dVictor ZverovichTEST(TimeTest, GrowBuffer) {
231a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  std::string s = "{:";
241a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  for (int i = 0; i < 30; ++i)
251a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich    s += "%c";
261a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  s += "}\n";
271a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  std::time_t t = std::time(0);
281a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich  fmt::format(s, *std::localtime(&t));
291a23f9c274071a91edde9fc28895c45940d4e90dVictor Zverovich}
30a5d0adf3953f0ae3e698d5b5702d1e5a7bf3d87eVictor Zverovich
31a5d0adf3953f0ae3e698d5b5702d1e5a7bf3d87eVictor ZverovichTEST(TimeTest, EmptyResult) {
32a5d0adf3953f0ae3e698d5b5702d1e5a7bf3d87eVictor Zverovich  EXPECT_EQ("", fmt::format("{}", std::tm()));
33a5d0adf3953f0ae3e698d5b5702d1e5a7bf3d87eVictor Zverovich}
341e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi
351e018e65cb74785d6b500bbf8fce82d3e807bf36codicodibool EqualTime(const std::tm &lhs, const std::tm &rhs) {
361e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  return lhs.tm_sec == rhs.tm_sec &&
371e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_min == rhs.tm_min &&
381e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_hour == rhs.tm_hour &&
391e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_mday == rhs.tm_mday &&
401e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_mon == rhs.tm_mon &&
411e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_year == rhs.tm_year &&
421e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_wday == rhs.tm_wday &&
431e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_yday == rhs.tm_yday &&
441e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi         lhs.tm_isdst == rhs.tm_isdst;
451e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi}
461e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi
471e018e65cb74785d6b500bbf8fce82d3e807bf36codicodiTEST(TimeTest, LocalTime) {
481e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  std::time_t t = std::time(0);
491e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  std::tm tm = *std::localtime(&t);
501e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  EXPECT_TRUE(EqualTime(tm, fmt::localtime(t)));
511e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi}
521e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi
531e018e65cb74785d6b500bbf8fce82d3e807bf36codicodiTEST(TimeTest, GMTime) {
541e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  std::time_t t = std::time(0);
551e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  std::tm tm = *std::gmtime(&t);
561e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi  EXPECT_TRUE(EqualTime(tm, fmt::gmtime(t)));
571e018e65cb74785d6b500bbf8fce82d3e807bf36codicodi}
58