// 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 DateTime.

class DateTest {
  // Tests if the time moves eventually forward.
  static void testNow() {
    var t1 = new DateTime.now();
    bool timeMovedForward = false;
    for (int i = 0; i < 1000000; i++) {
      var t2 = new DateTime.now();
      if (t1.millisecondsSinceEpoch < t2.millisecondsSinceEpoch) {
        timeMovedForward = true;
        break;
      }
    }
    Expect.equals(true, timeMovedForward);
    Expect.isFalse(t1.isUtc);
  }

  static void testValue() {
    var dt1 = new DateTime.now();
    var millisecondsSinceEpoch = dt1.millisecondsSinceEpoch;
    var dt2 = new DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch);
    Expect.equals(millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
  }

  static void testFarAwayDates() {
    DateTime dt =
        new DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime object in
    // EcmaScript 15.9.1 and in particular 15.9.1.8/9).
    DateTime dt = new DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.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 DateTime.utc(2035, 1, 1, 0, 0, 0, 1);
    Expect.equals(SECONDS_YEAR_2035 * 1000 + 1, dt.millisecondsSinceEpoch);
    dt = new DateTime.utc(2034, 12, 31, 23, 59, 59, 999);
    Expect.equals(SECONDS_YEAR_2035 * 1000 - 1, dt.millisecondsSinceEpoch);
    dt = new DateTime.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);
    DateTime dt2 = new DateTime(
        dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
        dt.millisecond);
    Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
    dt = new DateTime.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 DateTime(
        dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
        dt.millisecond);
    Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
    dt = new DateTime.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 DateTime(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 DateTime.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 DateTime.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 DateTime.fromMillisecondsSinceEpoch(8640000000000000);
    dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute);
    Expect.equals(8640000000000000, dt.millisecondsSinceEpoch);
    dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000);
    dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute);
    Expect.equals(-8640000000000000, dt.millisecondsSinceEpoch);
    Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(8640000000000001,
                                                            isUtc: true));
    Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(-8640000000000001,
                                                            isUtc: true));
    Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(8640000000000001));
    Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(-8640000000000001));
    dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000);
    Expect.throws(() => new DateTime(dt.year, dt.month, dt.day,
                                 dt.hour, dt.minute, 0, 1));
    dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true);
    Expect.throws(() => new DateTime.utc(dt.year, dt.month, dt.day,
                                     dt.hour, dt.minute, 0, 1));
    dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000);
    Expect.throws(() => new DateTime(dt.year, dt.month, dt.day,
                                 dt.hour, dt.minute, 0, -1));
    dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true);
    Expect.throws(() => new DateTime.utc(dt.year, dt.month, dt.day,
                                     dt.hour, dt.minute, 0, -1));
  }

  static void testUTCGetters() {
    var dt = new DateTime.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 DateTime.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 DateTime.fromMillisecondsSinceEpoch(1305140315000);
    var dt2 = new DateTime.utc(dt1.year, dt1.month, dt1.day,
                           dt1.hour, dt1.minute, dt1.second, dt1.millisecond);
    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 DateTime.utc(2011, 5, 11, 18, 58, 35, 0);
    var dt0b = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0).toLocal();
    Expect.equals(1305140315000, dt0.millisecondsSinceEpoch);
    var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
    Expect.equals(dt1.millisecondsSinceEpoch, dt0.millisecondsSinceEpoch);
    Expect.equals(false, dt1 == dt0);
    Expect.equals(true, dt1 == dt0b);
    var dt3 = new DateTime(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
                       dt1.second, dt1.millisecond);
    Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
    Expect.equals(false, dt3 == dt0);
    Expect.equals(true, dt1 == dt3);
    dt3 = new DateTime(
        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 DateTime(2011, 5, dt1.day, dt1.hour, dt1.minute, 35, 0);
    Expect.equals(dt2.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
    Expect.equals(true, dt2 == dt3);
    dt1 = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true);
    dt3 = new DateTime.utc(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
                       dt1.second, dt1.millisecond);
    Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
    dt3 = new DateTime.utc(99, 1, 2, 10, 11, 12, 0);
    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 DateTime(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 DateTime.utc(99, 1, 2);
    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 DateTime(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 DateTime.utc(2012, 2, 27, 13, 27, 0);
    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 DateTime.fromMillisecondsSinceEpoch(1305140315000);
    var dt2 = dt1.toUtc();
    Expect.equals(dt1.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
    var dt3 = new DateTime.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 DateTime.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 DateTime(2012, 6, 20, 12, 30, 30, 500);

    // Millisecond
    print("  >>> Millisecond+");
    var dt = new DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(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 DateTime(2012, 12, 31, 23, 59, 59, 999);
    var dtTick = new DateTime(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 DateTime(2012, 1, 1, 0, 0, 0, 0);
    dtTick = new DateTime(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 DateTime(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 DateTime API that deals with strings.
    var dt1 = DateTime.parse("2011-05-11 18:58:35Z");
    Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
    Expect.isTrue(dt1.isUtc);
    dt1 = DateTime.parse("20110511 18:58:35z");
    Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
    Expect.isTrue(dt1.isUtc);
    dt1 = DateTime.parse("+20110511 18:58:35z");
    Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
    Expect.isTrue(dt1.isUtc);
    var str = dt1.toString();
    var dt2 = DateTime.parse(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 = DateTime.parse("-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 = DateTime.parse("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 = DateTime.parse("2012-01-01 00:00:10.012");
    Expect.equals(12, dt6.millisecond);
    dt6 = DateTime.parse("2012-01-01 00:00:10.003");
    Expect.equals(3, dt6.millisecond);
    dt6 = DateTime.parse("2012-01-01 00:00:10.5");
    Expect.equals(500, dt6.millisecond);
    dt6 = DateTime.parse("2012-01-01 00:00:10.003Z");
    Expect.equals(3, dt6.millisecond);
    dt6 = DateTime.parse("2012-01-01 00:00:10.5z");
    Expect.equals(500, dt6.millisecond);
    var dt7 = DateTime.parse("2011-05-11T18:58:35Z");
    Expect.equals(1305140315000, dt7.millisecondsSinceEpoch);
    var dt8 = DateTime.parse("-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 = DateTime.parse("-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 = DateTime.parse("-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 = DateTime.parse("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 = DateTime.parse("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 = DateTime.parse("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 = DateTime.parse("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 = DateTime.parse("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 = DateTime.parse("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 = DateTime.parse("-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 = DateTime.parse("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 = DateTime.parse("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 = DateTime.parse("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 DateTime(2011, 10, 6, 0, 45, 37, 0);
    Expect.equals(DateTime.THU, d.weekday);
    d = new DateTime.utc(2011, 10, 6, 0, 45, 37, 0);
    Expect.equals(DateTime.THU, d.weekday);
    d = new DateTime(2011, 10, 5, 23, 45, 37, 0);
    Expect.equals(DateTime.WED, d.weekday);
    d = new DateTime.utc(2011, 10, 5, 23, 45, 37, 0);
    Expect.equals(DateTime.WED, d.weekday);
    // 1970-01-01 is Wintertime.
    d = new DateTime(1970, 1, 1, 0, 0, 0, 1);
    Expect.equals(DateTime.THU, d.weekday);
    d = new DateTime.utc(1970, 1, 1, 0, 0, 0, 1);
    Expect.equals(DateTime.THU, d.weekday);
    d = new DateTime.utc(1969, 12, 31, 23, 59, 59, 999);
    Expect.equals(DateTime.WED, d.weekday);
    d = new DateTime(1969, 12, 31, 23, 59, 59, 999);
    Expect.equals(DateTime.WED, d.weekday);
    d = new DateTime(2011, 10, 4, 23, 45, 37, 0);
    Expect.equals(DateTime.TUE, d.weekday);
    d = new DateTime(2011, 10, 3, 23, 45, 37, 0);
    Expect.equals(DateTime.MON, d.weekday);
    d = new DateTime(2011, 10, 2, 23, 45, 37, 0);
    Expect.equals(DateTime.SUN, d.weekday);
    d = new DateTime(2011, 10, 1, 23, 45, 37, 0);
    Expect.equals(DateTime.SAT, d.weekday);
    d = new DateTime(2011, 9, 30, 23, 45, 37, 0);
    Expect.equals(DateTime.FRI, d.weekday);
  }

  static void testMain() {
    testNow();
    testValue();
    testConstructors();
    testUTCGetters();
    testLocalGetters();
    testChangeTimeZone();
    testSubAdd();
    testUnderflowAndOverflow();
    testDateStrings();
    testEquivalentYears();
    testExtremes();
    testFarAwayDates();
    testWeekday();
  }
}

main() {
  DateTest.testMain();
}
