// Copyright (c) 2013, 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.

import "package:expect/expect.dart";

check(DateTime expected, String str) {
  DateTime actual = DateTime.parse(str);
  Expect.equals(expected, actual);  // Only checks if they are at the same time.
  Expect.equals(expected.isUtc, actual.isUtc);
}

bool get supportsMicroseconds =>
    new DateTime.fromMicrosecondsSinceEpoch(1).microsecondsSinceEpoch == 1;

main() {
  check(new DateTime(2012, 02, 27, 13, 27), "2012-02-27 13:27:00");
  if (supportsMicroseconds) {
    check(new DateTime.utc(2012, 02, 27, 13, 27, 0, 123, 456),
          "2012-02-27 13:27:00.123456z");
  } else {
    check(new DateTime.utc(2012, 02, 27, 13, 27, 0, 123, 456),
          "2012-02-27 13:27:00.123z");
  }
  check(new DateTime(2012, 02, 27, 13, 27), "20120227 13:27:00");
  check(new DateTime(2012, 02, 27, 13, 27), "20120227T132700");
  check(new DateTime(2012, 02, 27), "20120227");
  check(new DateTime(2012, 02, 27), "+20120227");
  check(new DateTime.utc(2012, 02, 27, 14), "2012-02-27T14Z");
  check(new DateTime.utc(-12345, 1, 1), "-123450101 00:00:00 Z");
  check(new DateTime.utc(2012, 02, 27, 14), "2012-02-27T14+00");
  check(new DateTime.utc(2012, 02, 27, 14), "2012-02-27T14+0000");
  check(new DateTime.utc(2012, 02, 27, 14), "2012-02-27T14+00:00");
  check(new DateTime.utc(2012, 02, 27, 14), "2012-02-27T14 +00:00");

  check(new DateTime.utc(2015, 02, 14, 13, 0, 0, 0),
        "2015-02-15T00:00+11");
  check(new DateTime.utc(2015, 02, 14, 13, 0, 0, 0),
        "2015-02-15T00:00:00+11");
  check(new DateTime.utc(2015, 02, 14, 13, 0, 0, 0),
        "2015-02-15T00:00:00+11:00");

  if (supportsMicroseconds) {
    check(new DateTime.utc(2015, 02, 15, 0, 0, 0, 500, 500),
        "2015-02-15T00:00:00.500500Z");
    check(new DateTime.utc(2015, 02, 15, 0, 0, 0, 511, 500),
        "2015-02-15T00:00:00.511500Z");
  } else {
    check(new DateTime.utc(2015, 02, 15, 0, 0, 0, 501),
        "2015-02-15T00:00:00.501Z");
    check(new DateTime.utc(2015, 02, 15, 0, 0, 0, 512),
        "2015-02-15T00:00:00.512Z");
  }
}
