diff options
author | Alberto Donizetti <alb.donizetti@gmail.com> | 2017-03-09 13:20:54 +0100 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2017-03-09 18:52:38 +0000 |
commit | 8890527476e25747f063377d637b106db0008329 (patch) | |
tree | a16daa0d55bec6dd54d37049fdcc9444a5cd763c | |
parent | ea6781bcd0fd8a0b59d5d617cb73516bd4f4ad12 (diff) | |
download | go-8890527476e25747f063377d637b106db0008329.tar.gz go-8890527476e25747f063377d637b106db0008329.zip |
[release-branch.go1.8] time: make the ParseInLocation test more robust
The tzdata 2017a update (2017-02-28) changed the abbreviation of the
Asia/Baghdad time zone (used in TestParseInLocation) from 'AST' to the
numeric '+03'.
Update the test so that it skips the checks if we're using a recent
tzdata release.
Fixes #19457
Change-Id: I45d705a5520743a611bdd194dc8f8d618679980c
Reviewed-on: https://go-review.googlesource.com/37964
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
(cherry picked from commit 91563ced5897faf729a34be7081568efcfedda31)
Reviewed-on: https://go-review.googlesource.com/37991
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r-- | src/time/format_test.go | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/src/time/format_test.go b/src/time/format_test.go index 219c2caee8..d0013bc3e3 100644 --- a/src/time/format_test.go +++ b/src/time/format_test.go @@ -245,27 +245,45 @@ func TestParseDayOutOfRange(t *testing.T) { } } +// TestParseInLocation checks that the Parse and ParseInLocation +// functions do not get confused by the fact that AST (Arabia Standard +// Time) and AST (Atlantic Standard Time) are different time zones, +// even though they have the same abbreviation. +// +// ICANN has been slowly phasing out invented abbreviation in favor of +// numeric time zones (for example, the Asia/Baghdad time zone +// abbreviation got changed from AST to +03 in the 2017a tzdata +// release); but we still want to make sure that the time package does +// not get confused on systems with slightly older tzdata packages. func TestParseInLocation(t *testing.T) { - // Check that Parse (and ParseInLocation) understand that - // Feb 01 AST (Arabia Standard Time) and Feb 01 AST (Atlantic Standard Time) - // are in different time zones even though both are called AST baghdad, err := LoadLocation("Asia/Baghdad") if err != nil { t.Fatal(err) } - t1, err := ParseInLocation("Jan 02 2006 MST", "Feb 01 2013 AST", baghdad) + var t1, t2 Time + + t1, err = ParseInLocation("Jan 02 2006 MST", "Feb 01 2013 AST", baghdad) if err != nil { t.Fatal(err) } - t2 := Date(2013, February, 1, 00, 00, 00, 0, baghdad) - if t1 != t2 { - t.Fatalf("ParseInLocation(Feb 01 2013 AST, Baghdad) = %v, want %v", t1, t2) - } + _, offset := t1.Zone() - if offset != 3*60*60 { - t.Fatalf("ParseInLocation(Feb 01 2013 AST, Baghdad).Zone = _, %d, want _, %d", offset, 3*60*60) + + // A zero offset means that ParseInLocation did not recognize the + // 'AST' abbreviation as matching the current location (Baghdad, + // where we'd expect a +03 hrs offset); likely because we're using + // a recent tzdata release (2017a or newer). + // If it happens, skip the Baghdad test. + if offset != 0 { + t2 = Date(2013, February, 1, 00, 00, 00, 0, baghdad) + if t1 != t2 { + t.Fatalf("ParseInLocation(Feb 01 2013 AST, Baghdad) = %v, want %v", t1, t2) + } + if offset != 3*60*60 { + t.Fatalf("ParseInLocation(Feb 01 2013 AST, Baghdad).Zone = _, %d, want _, %d", offset, 3*60*60) + } } blancSablon, err := LoadLocation("America/Blanc-Sablon") @@ -273,6 +291,9 @@ func TestParseInLocation(t *testing.T) { t.Fatal(err) } + // In this case 'AST' means 'Atlantic Standard Time', and we + // expect the abbreviation to correctly match the american + // location. t1, err = ParseInLocation("Jan 02 2006 MST", "Feb 01 2013 AST", blancSablon) if err != nil { t.Fatal(err) |