Add some unit tests for fx_date_helpers.h.

Improve test coverage for FX_GetYearFromTime() / FX_GetMonthFromTime().

Change-Id: If66fb481befbc7a5dae3197af659fb5bd05cb6d3
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/61350
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/BUILD.gn b/fxjs/BUILD.gn
index 0f51f9c..c36ab4e 100644
--- a/fxjs/BUILD.gn
+++ b/fxjs/BUILD.gn
@@ -226,6 +226,7 @@
       "cfxjs_engine_unittest.cpp",
       "cjs_publicmethods_unittest.cpp",
       "cjs_util_unittest.cpp",
+      "fx_date_helpers_unittest.cpp",
     ]
     configs = [ "//v8:external_startup_data" ]
     deps = [
diff --git a/fxjs/fx_date_helpers_unittest.cpp b/fxjs/fx_date_helpers_unittest.cpp
new file mode 100644
index 0000000..fb756b9
--- /dev/null
+++ b/fxjs/fx_date_helpers_unittest.cpp
@@ -0,0 +1,108 @@
+// 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;
+  }
+}