Commit 88905274 authored by Alberto Donizetti's avatar Alberto Donizetti Committed by Brad Fitzpatrick

[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/37964Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
(cherry picked from commit 91563ced)
Reviewed-on: https://go-review.googlesource.com/37991
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
parent ea6781bc
...@@ -245,27 +245,45 @@ func TestParseDayOutOfRange(t *testing.T) { ...@@ -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) { 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") baghdad, err := LoadLocation("Asia/Baghdad")
if err != nil { if err != nil {
t.Fatal(err) 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 { if err != nil {
t.Fatal(err) 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() _, 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") blancSablon, err := LoadLocation("America/Blanc-Sablon")
...@@ -273,6 +291,9 @@ func TestParseInLocation(t *testing.T) { ...@@ -273,6 +291,9 @@ func TestParseInLocation(t *testing.T) {
t.Fatal(err) 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) t1, err = ParseInLocation("Jan 02 2006 MST", "Feb 01 2013 AST", blancSablon)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment