From 59768e00a1eb369934602f09abbee99d3ee60e2f Mon Sep 17 00:00:00 2001 From: "alanknight@google.com" Date: Thu, 28 Nov 2013 19:31:32 +0000 Subject: [PATCH] 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 --- pkg/intl/test/date_time_format_test_core.dart | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/intl/test/date_time_format_test_core.dart b/pkg/intl/test/date_time_format_test_core.dart index 757bb6bd80e..5d3909010c0 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 @@ testRoundTripParsing(String localeName, DateTime date) { // 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 @@ testRoundTripParsing(String localeName, DateTime date) { 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 @@ testRoundTripParsing(String localeName, DateTime date) { 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)); } }