blob: b26c58c5c12dceec38ce0dd28e085f8390574afa [file] [edit]
@TestOn('browser')
library;
import 'package:test/test.dart';
import 'package:timezone/browser.dart';
Future<void> main() async {
await initializeTimeZone();
final detroit = getLocation('America/Detroit');
final la = getLocation('America/Los_Angeles');
final newYork = getLocation('America/New_York');
group('Constructors', () {
test('Default', () {
final t = TZDateTime(la, 2010, 1, 2, 3, 4, 5, 6);
expect(t.toString(), equals('2010-01-02 03:04:05.006-0800'));
});
test('from DateTime', () {
final utcTime = DateTime.utc(2010, 1, 2, 3, 4, 5, 6);
final t = TZDateTime.from(utcTime, newYork);
expect(t.toString(), equals('2010-01-01 22:04:05.006-0500'));
});
test('from TZDateTime', () {
final laTime = TZDateTime(la, 2010, 1, 2, 3, 4, 5, 6);
final t = TZDateTime.from(laTime, newYork);
expect(t.toString(), equals('2010-01-02 06:04:05.006-0500'));
});
test('fromMilliseconds', () {
final t = TZDateTime.fromMillisecondsSinceEpoch(newYork, 1262430245006);
expect(t.toString(), equals('2010-01-02 06:04:05.006-0500'));
});
// This started failing, because Chrome is temporarily disallowing
// microsecond timestamps?
test('fromMicroseconds', () {
final t = TZDateTime.fromMicrosecondsSinceEpoch(
newYork,
1262430245006007,
);
expect(t.toString(), equals('2010-01-02 06:04:05.006007-0500'));
}, skip: true);
test('utc', () {
final t = TZDateTime.utc(2010, 1, 2, 3, 4, 5, 6);
expect(t.toString(), equals('2010-01-02 03:04:05.006Z'));
});
});
group('Offsets', () {
group('UTC to America/Detroit', () {
group('Simple translations', () {
final u1 = DateTime.utc(1975, 1, 1, 5);
final x1 = TZDateTime.from(u1, detroit);
test('$u1 => 1975-01-01 00:00:00.000-0500', () {
expect(x1.toString(), equals('1975-01-01 00:00:00.000-0500'));
});
final u2 = u1.subtract(const Duration(milliseconds: 1));
final x2 = TZDateTime.from(u2, detroit);
test('$u2 => 1974-12-31 23:59:59.999-0500', () {
expect(x2.toString(), equals('1974-12-31 23:59:59.999-0500'));
});
final u3 = u1.add(const Duration(milliseconds: 1));
final x3 = TZDateTime.from(u3, detroit);
test('$u3 => 1975-01-01 00:00:00.001-0500', () {
expect(x3.toString(), equals('1975-01-01 00:00:00.001-0500'));
});
});
group('EWT/EPT boundaries', () {
final u1 = DateTime.utc(1945, 09, 30, 6);
final x1 = TZDateTime.from(u1, detroit);
test('$u1 => 1945-09-30 01:00:00.000-0500', () {
expect(x1.toString(), '1945-09-30 01:00:00.000-0500');
});
final u2 = u1.subtract(const Duration(milliseconds: 1));
final x2 = TZDateTime.from(u2, detroit);
test('$u2 => 1945-09-30 01:59:59.999-0400', () {
expect(x2.toString(), equals('1945-09-30 01:59:59.999-0400'));
});
final u3 = u1.add(const Duration(milliseconds: 1));
final x3 = TZDateTime.from(u3, detroit);
test('$u3 => 1945-09-30 01:00:00.001-0500', () {
expect(x3.toString(), equals('1945-09-30 01:00:00.001-0500'));
});
});
});
group('America/Detroit to UTC', () {
group('EWT/EPT boundaries', () {
final x1 = TZDateTime(detroit, 1945, 9, 30, 1);
final u1 = DateTime.fromMillisecondsSinceEpoch(
x1.millisecondsSinceEpoch,
isUtc: true,
);
test('$x1 => 1945-09-30 05:00:00.000Z', () {
expect(u1.toString(), '1945-09-30 05:00:00.000Z');
});
final x2 = x1.subtract(const Duration(milliseconds: 1));
final u2 = DateTime.fromMillisecondsSinceEpoch(
x2.millisecondsSinceEpoch,
isUtc: true,
);
test('$x2 => 1945-09-30 04:59:59.999Z', () {
expect(u2.toString(), equals('1945-09-30 04:59:59.999Z'));
});
final x3 = x1.add(const Duration(milliseconds: 1));
final u3 = DateTime.fromMillisecondsSinceEpoch(
x3.millisecondsSinceEpoch,
isUtc: true,
);
test('$x3 => 1945-09-30 05:00:00.001Z', () {
expect(u3.toString(), equals('1945-09-30 05:00:00.001Z'));
});
final x4 = x1.add(const Duration(hours: 1));
final u4 = DateTime.fromMillisecondsSinceEpoch(
x4.millisecondsSinceEpoch,
isUtc: true,
);
test('$x4 => 1945-09-30 06:00:00.000Z', () {
expect(u4.toString(), equals('1945-09-30 06:00:00.000Z'));
});
final x5 = x2.add(const Duration(hours: 1));
final u5 = DateTime.fromMillisecondsSinceEpoch(
x5.millisecondsSinceEpoch,
isUtc: true,
);
test('$x5 => 1945-09-30 05:59:59.999Z', () {
expect(u5.toString(), equals('1945-09-30 05:59:59.999Z'));
});
});
});
});
}