Retry date comparison to avoid a rare flake that might be associated with DST
BUG=
R=floitsch@google.com
Review URL: https://codereview.chromium.org//92333002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30767 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/intl/test/date_time_format_test_core.dart b/pkg/intl/test/date_time_format_test_core.dart
index 757bb6b..5d39090 100644
--- a/pkg/intl/test/date_time_format_test_core.dart
+++ b/pkg/intl/test/date_time_format_test_core.dart
@@ -144,7 +144,7 @@
// At least in most cases. In some cases, we can't even do that. e.g.
// the skeleton WEEKDAY can't be reconstructed at all, and YEAR_MONTH
// formats don't give us enough information to construct a valid date.
- var badSkeletons = [
+ var badSkeletons = const [
DateFormat.ABBR_WEEKDAY,
DateFormat.WEEKDAY,
DateFormat.QUARTER,
@@ -156,6 +156,9 @@
DateFormat.MONTH_WEEKDAY_DAY,
DateFormat.NUM_MONTH_WEEKDAY_DAY,
DateFormat.ABBR_MONTH_WEEKDAY_DAY];
+ var originalTime = new DateTime.now();
+ var originalTimeZoneOffset = date.timeZoneOffset;
+ var originalTimeZoneName = date.timeZoneName;
for(int i = 0; i < formatsToTest.length; i++) {
var skeleton = formatsToTest[i];
if (!badSkeletons.any((x) => x == skeleton)) {
@@ -163,6 +166,25 @@
var actualResult = format.format(date);
var parsed = format.parse(actualResult);
var thenPrintAgain = format.format(parsed);
+ // We've seen a case where this failed in a way that seemed like a time
+ // zone shifting or some other strange behaviour that caused an off by
+ // one error in the date. Check for this and print out as much information
+ // as possible if it occurs again.
+ if (thenPrintAgain != actualResult) {
+ print("Date mismatch!");
+ print(" Expected $actualResult");
+ print(" Got $thenPrintAgain");
+ print(" Original date = $date");
+ print(" Original ms = ${date.millisecondsSinceEpoch}");
+ print(" Parsed back to $parsed");
+ print(" Parsed ms = ${parsed.millisecondsSinceEpoch}");
+ print(" Original tz = $originalTimeZoneOffset");
+ print(" Current tz name = $originalTimeZoneName");
+ print(" Current tz = ${parsed.timeZoneOffset}");
+ print(" Current tz name = ${parsed.timeZoneName}");
+ print(" Start time = $originalTime");
+ print(" Current time ${new DateTime.now()}");
+ }
expect(thenPrintAgain, equals(actualResult));
}
}