| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // Dart test program for Date. |
| |
| class DateTest { |
| // Tests if the time moves eventually forward. |
| static void testNow() { |
| var t1 = new Date.now(); |
| bool timeMovedForward = false; |
| for (int i = 0; i < 1000000; i++) { |
| var t2 = new Date.now(); |
| if (t1.millisecondsSinceEpoch < t2.millisecondsSinceEpoch) { |
| timeMovedForward = true; |
| break; |
| } |
| } |
| Expect.equals(true, timeMovedForward); |
| Expect.isFalse(t1.isUtc); |
| } |
| |
| static void testValue() { |
| var dt1 = new Date.now(); |
| var millisecondsSinceEpoch = dt1.millisecondsSinceEpoch; |
| var dt2 = new Date.fromMillisecondsSinceEpoch(millisecondsSinceEpoch); |
| Expect.equals(millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); |
| } |
| |
| static void testFarAwayDates() { |
| Date dt = |
| new Date.fromMillisecondsSinceEpoch(1000000000000001, isUtc: true); |
| Expect.equals(33658, dt.year); |
| Expect.equals(9, dt.month); |
| Expect.equals(27, dt.day); |
| Expect.equals(1, dt.hour); |
| Expect.equals(46, dt.minute); |
| Expect.equals(40, dt.second); |
| Expect.equals(1, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-1000000000000001, isUtc: true); |
| Expect.equals(-29719, dt.year); |
| Expect.equals(4, dt.month); |
| Expect.equals(5, dt.day); |
| Expect.equals(22, dt.hour); |
| Expect.equals(13, dt.minute); |
| Expect.equals(19, dt.second); |
| Expect.equals(999, dt.millisecond); |
| // Same with local zone. |
| dt = new Date.fromMillisecondsSinceEpoch(1000000000000001); |
| Expect.equals(33658, dt.year); |
| Expect.equals(9, dt.month); |
| Expect.equals(true, dt.day == 27 || dt.day == 26); |
| // Not much we can test for local hour. |
| Expect.equals(true, dt.hour >= 0 && dt.hour < 24); |
| // Timezones can have offsets down to 15 minute. |
| Expect.equals(true, dt.minute % 15 == 46 % 15); |
| Expect.equals(40, dt.second); |
| Expect.equals(1, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-1000000000000001); |
| Expect.equals(-29719, dt.year); |
| Expect.equals(4, dt.month); |
| Expect.equals(true, 5 == dt.day || 6 == dt.day); |
| // Not much we can test for local hour. |
| Expect.equals(true, dt.hour >= 0 && dt.hour < 24); |
| // Timezones can have offsets down to 15 minute. |
| Expect.equals(true, dt.minute % 15 == 13); |
| Expect.equals(19, dt.second); |
| Expect.equals(999, dt.millisecond); |
| } |
| |
| static void testEquivalentYears() { |
| // All hardcoded values come from V8. This means that the values are not |
| // necessarily correct (see limitations of Date object in |
| // EcmaScript 15.9.1 and in particular 15.9.1.8/9). |
| Date dt = new Date.fromMillisecondsSinceEpoch(-31485600000, isUtc: true); |
| Expect.equals(1969, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-63108000000, isUtc: true); |
| Expect.equals(1968, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-94644000000, isUtc: true); |
| Expect.equals(1967, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-126180000000, isUtc: true); |
| Expect.equals(1966, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-157716000000, isUtc: true); |
| Expect.equals(1965, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-2177402400000, isUtc: true); |
| Expect.equals(1901, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-5333076000000, isUtc: true); |
| Expect.equals(1801, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-8520285600000, isUtc: true); |
| Expect.equals(1700, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-14831719200000, isUtc: true); |
| Expect.equals(1500, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-59011408800000, isUtc: true); |
| Expect.equals(100, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(14, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-62011408800000, isUtc: true); |
| Expect.equals(4, dt.year); |
| Expect.equals(12, dt.month); |
| Expect.equals(8, dt.day); |
| Expect.equals(8, dt.hour); |
| Expect.equals(40, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-64011408800000, isUtc: true); |
| Expect.equals(-59, dt.year); |
| Expect.equals(7, dt.month); |
| Expect.equals(24, dt.day); |
| Expect.equals(5, dt.hour); |
| Expect.equals(6, dt.minute); |
| Expect.equals(40, dt.second); |
| Expect.equals(0, dt.millisecond); |
| final int SECONDS_YEAR_2035 = 2051222400; |
| dt = new Date.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1, |
| isUtc: true); |
| Expect.equals(2035, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(0, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(1, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1, |
| isUtc: true); |
| Expect.equals(2034, dt.year); |
| Expect.equals(12, dt.month); |
| Expect.equals(31, dt.day); |
| Expect.equals(23, dt.hour); |
| Expect.equals(59, dt.minute); |
| Expect.equals(59, dt.second); |
| Expect.equals(999, dt.millisecond); |
| dt = new Date(2035, 1, 1, 0, 0, 0, 1, isUtc: true); |
| Expect.equals(SECONDS_YEAR_2035 * 1000 + 1, dt.millisecondsSinceEpoch); |
| dt = new Date(2034, 12, 31, 23, 59, 59, 999, isUtc: true); |
| Expect.equals(SECONDS_YEAR_2035 * 1000 - 1, dt.millisecondsSinceEpoch); |
| dt = new Date.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1); |
| Expect.equals(true, (2035 == dt.year && 1 == dt.month && 1 == dt.day) || |
| (2034 == dt.year && 12 == dt.month && 31 == dt.day)); |
| Expect.equals(0, dt.second); |
| Expect.equals(1, dt.millisecond); |
| Date dt2 = new Date( |
| dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, |
| dt.millisecond); |
| Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); |
| dt = new Date.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1); |
| Expect.equals(true, (2035 == dt.year && 1 == dt.month && 1 == dt.day) || |
| (2034 == dt.year && 12 == dt.month && 31 == dt.day)); |
| Expect.equals(59, dt.second); |
| Expect.equals(999, dt.millisecond); |
| dt2 = new Date( |
| dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, |
| dt.millisecond); |
| Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); |
| dt = new Date.fromMillisecondsSinceEpoch(2100000000 * 1000, isUtc: true); |
| Expect.equals(2036, dt.year); |
| Expect.equals(7, dt.month); |
| Expect.equals(18, dt.day); |
| Expect.equals(13, dt.hour); |
| Expect.equals(20, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| // Internally this will use the maximum value for the native calls. |
| dt = new Date(2036, 7, 18, 13, 20); |
| Expect.equals(2036, dt.year); |
| Expect.equals(7, dt.month); |
| Expect.equals(18, dt.day); |
| Expect.equals(13, dt.hour); |
| Expect.equals(20, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| Expect.equals("2036-07-18 13:20:00.000", dt.toString()); |
| } |
| |
| static void testExtremes() { |
| var dt = |
| new Date.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true); |
| Expect.equals(275760, dt.year); |
| Expect.equals(9, dt.month); |
| Expect.equals(13, dt.day); |
| Expect.equals(0, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| dt = new Date.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true); |
| Expect.equals(-271821, dt.year); |
| Expect.equals(4, dt.month); |
| Expect.equals(20, dt.day); |
| Expect.equals(0, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(0, dt.millisecond); |
| // Make sure that we can build the extreme dates in local too. |
| dt = new Date.fromMillisecondsSinceEpoch(8640000000000000); |
| dt = new Date(dt.year, dt.month, dt.day, dt.hour, dt.minute); |
| Expect.equals(8640000000000000, dt.millisecondsSinceEpoch); |
| dt = new Date.fromMillisecondsSinceEpoch(-8640000000000000); |
| dt = new Date(dt.year, dt.month, dt.day, dt.hour, dt.minute); |
| Expect.equals(-8640000000000000, dt.millisecondsSinceEpoch); |
| Expect.throws(() => new Date.fromMillisecondsSinceEpoch(8640000000000001, |
| isUtc: true)); |
| Expect.throws(() => new Date.fromMillisecondsSinceEpoch(-8640000000000001, |
| isUtc: true)); |
| Expect.throws(() => new Date.fromMillisecondsSinceEpoch(8640000000000001)); |
| Expect.throws(() => new Date.fromMillisecondsSinceEpoch(-8640000000000001)); |
| dt = new Date.fromMillisecondsSinceEpoch(8640000000000000); |
| Expect.throws(() => new Date(dt.year, dt.month, dt.day, |
| dt.hour, dt.minute, 0, 1)); |
| dt = new Date.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true); |
| Expect.throws(() => new Date(dt.year, dt.month, dt.day, |
| dt.hour, dt.minute, 0, 1, isUtc: true)); |
| dt = new Date.fromMillisecondsSinceEpoch(-8640000000000000); |
| Expect.throws(() => new Date(dt.year, dt.month, dt.day, |
| dt.hour, dt.minute, 0, -1)); |
| dt = new Date.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true); |
| Expect.throws(() => new Date(dt.year, dt.month, dt.day, |
| dt.hour, dt.minute, 0, -1, isUtc: true)); |
| } |
| |
| static void testUTCGetters() { |
| var dt = new Date.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); |
| Expect.equals(2011, dt.year); |
| Expect.equals(5, dt.month); |
| Expect.equals(11, dt.day); |
| Expect.equals(18, dt.hour); |
| Expect.equals(58, dt.minute); |
| Expect.equals(35, dt.second); |
| Expect.equals(0, dt.millisecond); |
| Expect.equals(true, dt.isUtc); |
| Expect.equals(1305140315000, dt.millisecondsSinceEpoch); |
| dt = new Date.fromMillisecondsSinceEpoch(-9999999, isUtc: true); |
| Expect.equals(1969, dt.year); |
| Expect.equals(12, dt.month); |
| Expect.equals(31, dt.day); |
| Expect.equals(21, dt.hour); |
| Expect.equals(13, dt.minute); |
| Expect.equals(20, dt.second); |
| Expect.equals(1, dt.millisecond); |
| } |
| |
| static void testLocalGetters() { |
| var dt1 = new Date.fromMillisecondsSinceEpoch(1305140315000); |
| var dt2 = new Date(dt1.year, dt1.month, dt1.day, |
| dt1.hour, dt1.minute, dt1.second, |
| dt1.millisecond, |
| isUtc: true); |
| Duration zoneOffset = dt1.difference(dt2); |
| Expect.equals(true, zoneOffset.inDays == 0); |
| Expect.equals(true, zoneOffset.inHours.abs() <= 12); |
| Expect.equals(dt1.year, dt2.year); |
| Expect.equals(dt1.month, dt2.month); |
| Expect.equals(true, (dt1.day - dt2.day).abs() <= 1); |
| Expect.equals(true, dt1.hour < 24); |
| // There are timezones with 0.5 or 0.25 hour offsets. |
| Expect.equals(true, |
| (dt1.minute == dt2.minute) || |
| ((dt1.minute - dt2.minute).abs() == 30) || |
| ((dt1.minute - dt2.minute).abs() == 15)); |
| Expect.equals(dt1.second, dt2.second); |
| Expect.equals(dt1.millisecond, dt2.millisecond); |
| } |
| |
| static void testConstructors() { |
| var dt0 = new Date(2011, 5, 11, 18, 58, 35, 0, isUtc: true); |
| Expect.equals(1305140315000, dt0.millisecondsSinceEpoch); |
| var dt1 = new Date.fromMillisecondsSinceEpoch(1305140315000); |
| Expect.equals(dt1.millisecondsSinceEpoch, dt0.millisecondsSinceEpoch); |
| Expect.equals(true, dt1 == dt0); |
| var dt3 = new Date(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, |
| dt1.second, dt1.millisecond); |
| Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); |
| Expect.equals(true, dt1 == dt3); |
| dt3 = new Date( |
| dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, |
| dt1.second, dt1.millisecond); |
| Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); |
| Expect.equals(true, dt1 == dt3); |
| var dt2 = dt1.toLocal(); |
| dt3 = new Date(2011, 5, dt1.day, dt1.hour, dt1.minute, 35, 0); |
| Expect.equals(dt2.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); |
| Expect.equals(true, dt2 == dt3); |
| dt1 = new Date.fromMillisecondsSinceEpoch(-9999999, isUtc: true); |
| dt3 = new Date( |
| dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, |
| dt1.second, dt1.millisecond, isUtc: true); |
| Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); |
| dt3 = new Date(99, 1, 2, 10, 11, 12, 0, isUtc: true); |
| Expect.equals(99, dt3.year); |
| Expect.equals(1, dt3.month); |
| Expect.equals(2, dt3.day); |
| Expect.equals(10, dt3.hour); |
| Expect.equals(11, dt3.minute); |
| Expect.equals(12, dt3.second); |
| Expect.equals(0, dt3.millisecond); |
| Expect.equals(true, dt3.isUtc); |
| var dt4 = new Date(99, 1, 2); |
| Expect.equals(99, dt4.year); |
| Expect.equals(1, dt4.month); |
| Expect.equals(2, dt4.day); |
| Expect.equals(0, dt4.hour); |
| Expect.equals(0, dt4.minute); |
| Expect.equals(0, dt4.second); |
| Expect.equals(0, dt4.millisecond); |
| Expect.isFalse(dt4.isUtc); |
| var dt5 = new Date(99, 1, 2, isUtc: true); |
| Expect.equals(99, dt5.year); |
| Expect.equals(1, dt5.month); |
| Expect.equals(2, dt5.day); |
| Expect.equals(0, dt5.hour); |
| Expect.equals(0, dt5.minute); |
| Expect.equals(0, dt5.second); |
| Expect.equals(0, dt5.millisecond); |
| Expect.isTrue(dt5.isUtc); |
| var dt6 = new Date(2012, 2, 27, 13, 27, 0); |
| Expect.equals(2012, dt6.year); |
| Expect.equals(2, dt6.month); |
| Expect.equals(27, dt6.day); |
| Expect.equals(13, dt6.hour); |
| Expect.equals(27, dt6.minute); |
| Expect.equals(0, dt6.second); |
| Expect.equals(0, dt6.millisecond); |
| Expect.isFalse(dt6.isUtc); |
| var dt7 = new Date(2012, 2, 27, 13, 27, 0, isUtc: true); |
| Expect.equals(2012, dt7.year); |
| Expect.equals(2, dt7.month); |
| Expect.equals(27, dt7.day); |
| Expect.equals(13, dt7.hour); |
| Expect.equals(27, dt7.minute); |
| Expect.equals(0, dt7.second); |
| Expect.equals(0, dt7.millisecond); |
| Expect.isTrue(dt7.isUtc); |
| } |
| |
| static void testChangeTimeZone() { |
| var dt1 = new Date.fromMillisecondsSinceEpoch(1305140315000); |
| var dt2 = dt1.toUtc(); |
| Expect.equals(dt1.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); |
| var dt3 = new Date.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); |
| Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); |
| Expect.equals(dt2.year, dt3.year); |
| Expect.equals(dt2.month, dt3.month); |
| Expect.equals(dt2.day, dt3.day); |
| Expect.equals(dt2.hour, dt3.hour); |
| Expect.equals(dt2.minute, dt3.minute); |
| Expect.equals(dt2.second, dt3.second); |
| Expect.equals(dt2.millisecond, dt3.millisecond); |
| var dt4 = dt3.toLocal(); |
| Expect.equals(dt1.year, dt4.year); |
| Expect.equals(dt1.month, dt4.month); |
| Expect.equals(dt1.day, dt4.day); |
| Expect.equals(dt1.hour, dt4.hour); |
| Expect.equals(dt1.minute, dt4.minute); |
| Expect.equals(dt1.second, dt4.second); |
| Expect.equals(dt1.millisecond, dt4.millisecond); |
| } |
| |
| static void testSubAdd() { |
| var dt1 = new Date.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); |
| var dt2 = dt1.add(new Duration(milliseconds: |
| 3 * Duration.MILLISECONDS_PER_SECOND + 5)); |
| Expect.equals(dt1.year, dt2.year); |
| Expect.equals(dt1.month, dt2.month); |
| Expect.equals(dt1.day, dt2.day); |
| Expect.equals(dt1.hour, dt2.hour); |
| Expect.equals(dt1.minute, dt2.minute); |
| Expect.equals(dt1.second + 3, dt2.second); |
| Expect.equals(dt1.millisecond + 5, dt2.millisecond); |
| var dt3 = dt2.subtract(new Duration(milliseconds: |
| 3 * Duration.MILLISECONDS_PER_SECOND + 5)); |
| Expect.equals(true, dt1 == dt3); |
| Expect.equals(false, dt1 == dt2); |
| } |
| |
| static void testUnderflowAndOverflow() { |
| final dtBase = new Date(2012, 6, 20, 12, 30, 30, 500); |
| |
| // Millisecond |
| print(" >>> Millisecond+"); |
| var dt = new Date(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, |
| dtBase.minute, dtBase.second, 1000); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second + 1, dt.second); |
| Expect.equals(0, dt.millisecond); |
| |
| print(" >>> Millisecond-"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, |
| dtBase.minute, dtBase.second, -1000); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second - 1, dt.second); |
| Expect.equals(0, dt.millisecond); |
| |
| // Second |
| print(" >>> Second+"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, |
| dtBase.minute, 60, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute + 1, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| print(" >>> Second-"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, |
| dtBase.minute, -60, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute - 1, dt.minute); |
| Expect.equals(0, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| // Minute |
| print(" >>> Minute+"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, 60, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour + 1, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| print(" >>> Minute-"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, -60, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour - 1, dt.hour); |
| Expect.equals(0, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| // Hour |
| print(" >>> Hour+"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, 24, dtBase.minute, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day + 1, dt.day); |
| Expect.equals(0, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| print(" >>> Hour-"); |
| dt = new Date(dtBase.year, dtBase.month, dtBase.day, -24, dtBase.minute, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month, dt.month); |
| Expect.equals(dtBase.day - 1, dt.day); |
| Expect.equals(0, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| // Day |
| print(" >>> Day+"); |
| dt = new Date(dtBase.year, dtBase.month, 31, dtBase.hour, dtBase.minute, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month + 1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| print(" >>> Day-"); |
| dt = new Date(dtBase.year, dtBase.month, -30, dtBase.hour, dtBase.minute, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year, dt.year); |
| Expect.equals(dtBase.month - 1, dt.month); |
| Expect.equals(1, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| // Month |
| print(" >>> Month+"); |
| dt = new Date(dtBase.year, 13, dtBase.day, dtBase.hour, dtBase.minute, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year + 1, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| print(" >>> Month-"); |
| dt = new Date(dtBase.year, -11, dtBase.day, dtBase.hour, dtBase.minute, |
| dtBase.second, dtBase.millisecond); |
| Expect.equals(dtBase.year - 1, dt.year); |
| Expect.equals(1, dt.month); |
| Expect.equals(dtBase.day, dt.day); |
| Expect.equals(dtBase.hour, dt.hour); |
| Expect.equals(dtBase.minute, dt.minute); |
| Expect.equals(dtBase.second, dt.second); |
| Expect.equals(dtBase.millisecond, dt.millisecond); |
| |
| // Flowing all the way up the chain. |
| print(" >>> Flow+"); |
| var dtBase1 = new Date(2012, 12, 31, 23, 59, 59, 999); |
| var dtTick = new Date(dtBase1.year, dtBase1.month, dtBase1.day, |
| dtBase1.hour, dtBase1.minute, dtBase1.second, |
| dtBase1.millisecond + 1); |
| Expect.equals(dtBase1.year + 1, dtTick.year); |
| Expect.equals(1, dtTick.month); |
| Expect.equals(1, dtTick.day); |
| Expect.equals(0, dtTick.hour); |
| Expect.equals(0, dtTick.minute); |
| Expect.equals(0, dtTick.second); |
| Expect.equals(0, dtTick.millisecond); |
| |
| print(" >>> Flow-"); |
| dtBase1 = new Date(2012, 1, 1, 0, 0, 0, 0); |
| dtTick = new Date(dtBase1.year, dtBase1.month, dtBase1.day, dtBase1.hour, |
| dtBase1.minute, dtBase1.second, dtBase1.millisecond - 1); |
| Expect.equals(dtBase1.year - 1, dtTick.year); |
| Expect.equals(12, dtTick.month); |
| Expect.equals(31, dtTick.day); |
| Expect.equals(23, dtTick.hour); |
| Expect.equals(59, dtTick.minute); |
| Expect.equals(59, dtTick.second); |
| Expect.equals(999, dtTick.millisecond); |
| |
| print(" >>> extra underflow"); |
| dtTick = new Date(dtBase1.year, dtBase1.month, dtBase1.day, -17520, |
| dtBase1.minute, dtBase1.second, dtBase1.millisecond); |
| Expect.equals(dtBase1.year - 2, dtTick.year); |
| Expect.equals(dtBase1.month, dtTick.month); |
| Expect.equals(dtBase1.day, dtTick.day); |
| Expect.equals(dtBase1.hour, dtTick.hour); |
| Expect.equals(dtBase1.minute, dtTick.minute); |
| Expect.equals(dtBase1.second, dtTick.second); |
| Expect.equals(dtBase1.millisecond, dtTick.millisecond); |
| } |
| |
| static void testDateStrings() { |
| // TODO(floitsch): Clean up the Date API that deals with strings. |
| var dt1 = new Date.fromString("2011-05-11 18:58:35Z"); |
| Expect.equals(1305140315000, dt1.millisecondsSinceEpoch); |
| Expect.isTrue(dt1.isUtc); |
| dt1 = new Date.fromString("20110511 18:58:35z"); |
| Expect.equals(1305140315000, dt1.millisecondsSinceEpoch); |
| Expect.isTrue(dt1.isUtc); |
| dt1 = new Date.fromString("+20110511 18:58:35z"); |
| Expect.equals(1305140315000, dt1.millisecondsSinceEpoch); |
| Expect.isTrue(dt1.isUtc); |
| var str = dt1.toString(); |
| var dt2 = new Date.fromString(str); |
| Expect.equals(true, dt1 == dt2); |
| var dt3 = dt1.toUtc(); |
| str = dt3.toString(); |
| Expect.equals("2011-05-11 18:58:35.000Z", str); |
| var dt4 = new Date.fromString("-1234-01-01 00:00:00Z"); |
| Expect.equals(-1234, dt4.year); |
| Expect.equals(1, dt4.month); |
| Expect.equals(1, dt4.day); |
| Expect.equals(0, dt4.hour); |
| Expect.equals(0, dt4.minute); |
| Expect.equals(0, dt4.second); |
| Expect.equals(0, dt4.millisecond); |
| Expect.isTrue(dt4.isUtc); |
| var dt5 = new Date.fromString("0099-01-02"); |
| Expect.equals(99, dt5.year); |
| Expect.equals(1, dt5.month); |
| Expect.equals(2, dt5.day); |
| Expect.equals(0, dt5.hour); |
| Expect.equals(0, dt5.minute); |
| Expect.equals(0, dt5.second); |
| Expect.equals(0, dt5.millisecond); |
| Expect.isFalse(dt5.isUtc); |
| var dt6 = new Date.fromString("2012-01-01 00:00:10.012"); |
| Expect.equals(12, dt6.millisecond); |
| dt6 = new Date.fromString("2012-01-01 00:00:10.003"); |
| Expect.equals(3, dt6.millisecond); |
| dt6 = new Date.fromString("2012-01-01 00:00:10.5"); |
| Expect.equals(500, dt6.millisecond); |
| dt6 = new Date.fromString("2012-01-01 00:00:10.003Z"); |
| Expect.equals(3, dt6.millisecond); |
| dt6 = new Date.fromString("2012-01-01 00:00:10.5z"); |
| Expect.equals(500, dt6.millisecond); |
| var dt7 = new Date.fromString("2011-05-11T18:58:35Z"); |
| Expect.equals(1305140315000, dt7.millisecondsSinceEpoch); |
| var dt8 = new Date.fromString("-1234-01-01T00:00:00Z"); |
| Expect.equals(-1234, dt8.year); |
| Expect.equals(1, dt8.month); |
| Expect.equals(1, dt8.day); |
| Expect.equals(0, dt8.hour); |
| Expect.equals(0, dt8.minute); |
| Expect.equals(0, dt8.second); |
| Expect.equals(0, dt8.millisecond); |
| Expect.isTrue(dt8.isUtc); |
| var dt9 = new Date.fromString("-1234-01-01T00:00:00"); |
| Expect.equals(-1234, dt9.year); |
| Expect.equals(1, dt9.month); |
| Expect.equals(1, dt9.day); |
| Expect.equals(0, dt9.hour); |
| Expect.equals(0, dt9.minute); |
| Expect.equals(0, dt9.second); |
| Expect.equals(0, dt9.millisecond); |
| Expect.isFalse(dt9.isUtc); |
| var dt10 = new Date.fromString("-12340101"); |
| Expect.equals(-1234, dt10.year); |
| Expect.equals(1, dt10.month); |
| Expect.equals(1, dt10.day); |
| Expect.equals(0, dt10.hour); |
| Expect.equals(0, dt10.minute); |
| Expect.equals(0, dt10.second); |
| Expect.equals(0, dt10.millisecond); |
| Expect.isFalse(dt10.isUtc); |
| dt1 = new Date.fromString("2012-02-27 13:27:00"); |
| Expect.equals(2012, dt1.year); |
| Expect.equals(2, dt1.month); |
| Expect.equals(27, dt1.day); |
| Expect.equals(13, dt1.hour); |
| Expect.equals(27, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(false, dt1.isUtc); |
| dt1 = new Date.fromString("2012-02-27 13:27:00.423z"); |
| Expect.equals(2012, dt1.year); |
| Expect.equals(2, dt1.month); |
| Expect.equals(27, dt1.day); |
| Expect.equals(13, dt1.hour); |
| Expect.equals(27, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(423, dt1.millisecond); |
| Expect.equals(true, dt1.isUtc); |
| dt1 = new Date.fromString("20120227 13:27:00"); |
| Expect.equals(2012, dt1.year); |
| Expect.equals(2, dt1.month); |
| Expect.equals(27, dt1.day); |
| Expect.equals(13, dt1.hour); |
| Expect.equals(27, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(false, dt1.isUtc); |
| dt1 = new Date.fromString("20120227T132700"); |
| Expect.equals(2012, dt1.year); |
| Expect.equals(2, dt1.month); |
| Expect.equals(27, dt1.day); |
| Expect.equals(13, dt1.hour); |
| Expect.equals(27, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(false, dt1.isUtc); |
| dt1 = new Date.fromString("20120227"); |
| Expect.equals(2012, dt1.year); |
| Expect.equals(2, dt1.month); |
| Expect.equals(27, dt1.day); |
| Expect.equals(0, dt1.hour); |
| Expect.equals(0, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(false, dt1.isUtc); |
| dt1 = new Date.fromString("2012-02-27T14Z"); |
| Expect.equals(2012, dt1.year); |
| Expect.equals(2, dt1.month); |
| Expect.equals(27, dt1.day); |
| Expect.equals(14, dt1.hour); |
| Expect.equals(0, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(true, dt1.isUtc); |
| dt1 = new Date.fromString("-123450101 00:00:00 Z"); |
| Expect.equals(-12345, dt1.year); |
| Expect.equals(1, dt1.month); |
| Expect.equals(1, dt1.day); |
| Expect.equals(0, dt1.hour); |
| Expect.equals(0, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(true, dt1.isUtc); |
| // We only support millisecond. If the user supplies more data (the "51" |
| // here), we round. |
| // If (eventually) we support more than just millisecond this test could |
| // fail. Please update the test in this case. |
| dt1 = new Date.fromString("1999-01-02 23:59:59.99951"); |
| Expect.equals(1999, dt1.year); |
| Expect.equals(1, dt1.month); |
| Expect.equals(3, dt1.day); |
| Expect.equals(0, dt1.hour); |
| Expect.equals(0, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(false, dt1.isUtc); |
| dt1 = new Date.fromString("1999-01-02 23:58:59.99951Z"); |
| Expect.equals(1999, dt1.year); |
| Expect.equals(1, dt1.month); |
| Expect.equals(2, dt1.day); |
| Expect.equals(23, dt1.hour); |
| Expect.equals(59, dt1.minute); |
| Expect.equals(0, dt1.second); |
| Expect.equals(0, dt1.millisecond); |
| Expect.equals(true, dt1.isUtc); |
| dt1 = new Date.fromString("0009-09-09 09:09:09.009Z"); |
| Expect.equals(9, dt1.year); |
| Expect.equals(9, dt1.month); |
| Expect.equals(9, dt1.day); |
| Expect.equals(9, dt1.hour); |
| Expect.equals(9, dt1.minute); |
| Expect.equals(9, dt1.second); |
| Expect.equals(9, dt1.millisecond); |
| Expect.equals(true, dt1.isUtc); |
| } |
| |
| static void testWeekday() { |
| // 2011-10-06 is Summertime. |
| var d = new Date(2011, 10, 6, 0, 45, 37, 0); |
| Expect.equals(Date.THU, d.weekday); |
| d = new Date(2011, 10, 6, 0, 45, 37, 0, isUtc: true); |
| Expect.equals(Date.THU, d.weekday); |
| d = new Date(2011, 10, 5, 23, 45, 37, 0); |
| Expect.equals(Date.WED, d.weekday); |
| d = new Date(2011, 10, 5, 23, 45, 37, 0, isUtc: true); |
| Expect.equals(Date.WED, d.weekday); |
| // 1970-01-01 is Wintertime. |
| d = new Date(1970, 1, 1, 0, 0, 0, 1); |
| Expect.equals(Date.THU, d.weekday); |
| d = new Date(1970, 1, 1, 0, 0, 0, 1, isUtc: true); |
| Expect.equals(Date.THU, d.weekday); |
| d = new Date(1969, 12, 31, 23, 59, 59, 999, isUtc: true); |
| Expect.equals(Date.WED, d.weekday); |
| d = new Date(1969, 12, 31, 23, 59, 59, 999); |
| Expect.equals(Date.WED, d.weekday); |
| d = new Date(2011, 10, 4, 23, 45, 37, 0); |
| Expect.equals(Date.TUE, d.weekday); |
| d = new Date(2011, 10, 3, 23, 45, 37, 0); |
| Expect.equals(Date.MON, d.weekday); |
| d = new Date(2011, 10, 2, 23, 45, 37, 0); |
| Expect.equals(Date.SUN, d.weekday); |
| d = new Date(2011, 10, 1, 23, 45, 37, 0); |
| Expect.equals(Date.SAT, d.weekday); |
| d = new Date(2011, 9, 30, 23, 45, 37, 0); |
| Expect.equals(Date.FRI, d.weekday); |
| } |
| |
| static void testMain() { |
| testNow(); |
| testValue(); |
| testConstructors(); |
| testUTCGetters(); |
| testLocalGetters(); |
| testChangeTimeZone(); |
| testSubAdd(); |
| testUnderflowAndOverflow(); |
| testDateStrings(); |
| testEquivalentYears(); |
| testExtremes(); |
| testFarAwayDates(); |
| testWeekday(); |
| } |
| } |
| |
| main() { |
| DateTest.testMain(); |
| } |