]> Cypherpunks repositories - gostls13.git/commitdiff
time: make the ParseInLocation test more robust
authorAlberto Donizetti <alb.donizetti@gmail.com>
Thu, 9 Mar 2017 12:20:54 +0000 (13:20 +0100)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 9 Mar 2017 18:31:42 +0000 (18:31 +0000)
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>

src/time/format_test.go

index 219c2caee8fd4dda440d828db2de1b94ca4edb77..d0013bc3e34c03d8ac3e0d492e7cf7140bf4ce3b 100644 (file)
@@ -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)