// Copyright 2019 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "fxjs/fx_date_helpers.h" #include "testing/gtest/include/gtest/gtest.h" namespace { constexpr double kMilliSecondsInADay = 1000 * 60 * 60 * 24; } // namespace TEST(FX_DateHelper, GetYearFromTime) { static constexpr struct { double time_ms; int expected_year; } kTests[] = { {-400 * kMilliSecondsInADay, 1968}, {-1, 1969}, {0, 1970}, {1, 1970}, {364.9 * kMilliSecondsInADay, 1970}, {365.0 * kMilliSecondsInADay, 1971}, {365.1 * kMilliSecondsInADay, 1971}, {2 * 365.0 * kMilliSecondsInADay, 1972}, // 1972 is a leap year, so there should be an extra day. {3 * 365.0 * kMilliSecondsInADay, 1972}, {(3 * 365.0 + 1) * kMilliSecondsInADay, 1973}, }; for (const auto& test : kTests) { EXPECT_EQ(test.expected_year, FX_GetYearFromTime(test.time_ms)) << test.time_ms; } } TEST(FX_DateHelper, GetMonthFromTime) { static constexpr struct { double time_ms; int expected_month; // Zero-based. } kTests[] = { {-400 * kMilliSecondsInADay, 10}, {-1, 11}, {0, 0}, {1, 0}, {364.9 * kMilliSecondsInADay, 11}, {365.0 * kMilliSecondsInADay, 0}, {365.1 * kMilliSecondsInADay, 0}, // 1972 is a leap year, so there should be an extra day. {2 * 365.0 * kMilliSecondsInADay, 0}, {3 * 365.0 * kMilliSecondsInADay, 11}, {(3 * 365.0 + 1) * kMilliSecondsInADay, 0}, // Tests boundaries for all months in 1970 not already covered above. {30 * kMilliSecondsInADay, 0}, {31 * kMilliSecondsInADay, 1}, {58 * kMilliSecondsInADay, 1}, {59 * kMilliSecondsInADay, 2}, {89 * kMilliSecondsInADay, 2}, {90 * kMilliSecondsInADay, 3}, {119 * kMilliSecondsInADay, 3}, {120 * kMilliSecondsInADay, 4}, {150 * kMilliSecondsInADay, 4}, {151 * kMilliSecondsInADay, 5}, {180 * kMilliSecondsInADay, 5}, {181 * kMilliSecondsInADay, 6}, {211 * kMilliSecondsInADay, 6}, {212 * kMilliSecondsInADay, 7}, {242 * kMilliSecondsInADay, 7}, {243 * kMilliSecondsInADay, 8}, {272 * kMilliSecondsInADay, 8}, {273 * kMilliSecondsInADay, 9}, {303 * kMilliSecondsInADay, 9}, {304 * kMilliSecondsInADay, 10}, {333 * kMilliSecondsInADay, 10}, {334 * kMilliSecondsInADay, 11}, {364 * kMilliSecondsInADay, 11}, // Tests boundaries for all months in 1972 not already covered above. {(2 * 365.0 + 30) * kMilliSecondsInADay, 0}, {(2 * 365.0 + 31) * kMilliSecondsInADay, 1}, {(2 * 365.0 + 59) * kMilliSecondsInADay, 1}, {(2 * 365.0 + 60) * kMilliSecondsInADay, 2}, {(2 * 365.0 + 90) * kMilliSecondsInADay, 2}, {(2 * 365.0 + 91) * kMilliSecondsInADay, 3}, {(2 * 365.0 + 120) * kMilliSecondsInADay, 3}, {(2 * 365.0 + 121) * kMilliSecondsInADay, 4}, {(2 * 365.0 + 151) * kMilliSecondsInADay, 4}, {(2 * 365.0 + 152) * kMilliSecondsInADay, 5}, {(2 * 365.0 + 181) * kMilliSecondsInADay, 5}, {(2 * 365.0 + 182) * kMilliSecondsInADay, 6}, {(2 * 365.0 + 212) * kMilliSecondsInADay, 6}, {(2 * 365.0 + 213) * kMilliSecondsInADay, 7}, {(2 * 365.0 + 243) * kMilliSecondsInADay, 7}, {(2 * 365.0 + 244) * kMilliSecondsInADay, 8}, {(2 * 365.0 + 273) * kMilliSecondsInADay, 8}, {(2 * 365.0 + 274) * kMilliSecondsInADay, 9}, {(2 * 365.0 + 304) * kMilliSecondsInADay, 9}, {(2 * 365.0 + 305) * kMilliSecondsInADay, 10}, {(2 * 365.0 + 334) * kMilliSecondsInADay, 10}, {(2 * 365.0 + 335) * kMilliSecondsInADay, 11}, }; for (const auto& test : kTests) { EXPECT_EQ(test.expected_month, FX_GetMonthFromTime(test.time_ms)) << test.time_ms; } }