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;
+ }
+}