a51dc25968
isUtc is now a getter. Date.hours -> Date.hour Date.minutes -> Date.minute Date.seconds -> Date.second Date.milliseconds -> Date.millisecond Date.fromEpoch -> Date.fromMillisecondsSinceEpoch Date.value -> Date.millisecondsSinceEpoch Date.MON == 1 (up to Date.SUN == 7). Fixes issue 3444, 1985. Review URL: https://chromiumcodereview.appspot.com//10538105 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8899 260f80e4-7a28-3924-810f-c04153c831b5
650 lines
25 KiB
Dart
650 lines
25 KiB
Dart
// Copyright (c) 2011, 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);
|
|
// TODO(floitsch): Update comment after refactoring.
|
|
// This test currently fails because the arguments must not be negative.
|
|
// However we are going to allow negative (and overflowing) arguments and
|
|
// this line will then throw for the correct reason.
|
|
Expect.throws(() => new Date(dt.year, dt.month, dt.day,
|
|
dt.hour, dt.minute, 0, -1));
|
|
}
|
|
|
|
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 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();
|
|
testDateStrings();
|
|
testEquivalentYears();
|
|
testExtremes();
|
|
testFarAwayDates();
|
|
testWeekday();
|
|
}
|
|
}
|
|
|
|
main() {
|
|
DateTest.testMain();
|
|
}
|