commit 45067641a270b705ec741af9b4fc653591981d5e
parent d42800c2916657189fe4ba2e80f0c3181b57fd5b
Author: André Bargull <andre.bargull@gmail.com>
Date: Tue, 4 Nov 2025 16:00:22 +0000
Bug 1997791: Account for repeated local time in Date.prototype.toLocaleString test. r=spidermonkey-reviewers,dminor
Differential Revision: https://phabricator.services.mozilla.com/D271040
Diffstat:
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/js/src/tests/non262/Date/15.9.5.5.js b/js/src/tests/non262/Date/15.9.5.5.js
@@ -50,12 +50,28 @@ expect = 0;
addTestCase();
// Date.parse is accurate to the second; valueOf() to the millisecond -
-status = "Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000";
-actual = Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000;
+status = "Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000 + (!isRepeatedTime(now) ? 0 : msPerHour)";
+actual = Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000 + (!isRepeatedTime(now) ? 0 : msPerHour);
expect = true;
addTestCase();
+// Test with repeated and skipped time due to daylight saving time.
+for (var date of [
+ // Switch from standard time to daylight saving time for PST8PDT.
+ new Date(Date.parse("2025-11-02T08:00:00Z")),
+ new Date(Date.parse("2025-11-02T09:00:00Z")),
+
+ // Switch from daylight saving time to standard time for PST8PDT.
+ new Date(Date.parse("2025-03-09T09:00:00Z")),
+ new Date(Date.parse("2025-03-09T10:00:00Z")),
+]) {
+ status = "Math.abs(Date.parse(date.toLocaleString('en-US')) - date.valueOf()) < 1000 + (!isRepeatedTime(date) ? 0 : msPerHour)";
+ actual = Math.abs(Date.parse(date.toLocaleString('en-US')) - date.valueOf()) < 1000 + (!isRepeatedTime(date) ? 0 : msPerHour);
+ expect = true;
+ addTestCase();
+}
+
// 1970
addDateTestCase(0);
@@ -109,3 +125,11 @@ function addDateTestCase(date_given_in_milliseconds)
addTestCase();
}
+
+// Repeated local time when switching from daylight saving time to standard time.
+function isRepeatedTime(date)
+{
+ var offset1 = date.getTimezoneOffset();
+ var offset2 = new Date(date.valueOf() - msPerHour).getTimezoneOffset();
+ return offset1 > offset2;
+}