Cleaning up the Time::gmtime and Time::localtime tests and make them go past 2038.
Michael G Schwern [Sun, 14 Sep 2008 02:26:38 +0000 (19:26 -0700)]
I'm a little nervous about assuming negative times are going to work with
localtime(), but gmtime() is safe.

lib/Time/gmtime.t
lib/Time/localtime.t

index 853ec3b..0e3855c 100644 (file)
@@ -3,55 +3,19 @@
 BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
-}
 
-BEGIN {
-    our $hasgm;
-    eval { my $n = gmtime 0 };
-    $hasgm = 1 unless $@ && $@ =~ /unimplemented/;
-    unless ($hasgm) { print "1..0 # Skip: no gmtime\n"; exit 0 }
-}
-
-BEGIN {
-    our @gmtime = gmtime 0; # This is the function gmtime.
-    unless (@gmtime) { print "1..0 # Skip: gmtime failed\n"; exit 0 }
+    require "./test.pl";
 }
 
-print "1..10\n";
-
-use Time::gmtime;
-
-print "ok 1\n";
-
-my $gmtime = gmtime 0 ; # This is the OO gmtime.
-
-print "not " unless $gmtime->sec   == $gmtime[0];
-print "ok 2\n";
-
-print "not " unless $gmtime->min   == $gmtime[1];
-print "ok 3\n";
-
-print "not " unless $gmtime->hour  == $gmtime[2];
-print "ok 4\n";
-
-print "not " unless $gmtime->mday  == $gmtime[3];
-print "ok 5\n";
-
-print "not " unless $gmtime->mon   == $gmtime[4];
-print "ok 6\n";
-
-print "not " unless $gmtime->year  == $gmtime[5];
-print "ok 7\n";
-
-print "not " unless $gmtime->wday  == $gmtime[6];
-print "ok 8\n";
-
-print "not " unless $gmtime->yday  == $gmtime[7];
-print "ok 9\n";
-
-print "not " unless $gmtime->isdst == $gmtime[8];
-print "ok 10\n";
-
+BEGIN { plan tests => 37; }
 
+BEGIN { use_ok Time::gmtime; }
 
+for my $time (0, 2**31-1, 2**33, time) {
+    my $gmtime = gmtime $time;          # This is the OO gmtime.
+    my @gmtime = CORE::gmtime $time;    # This is the gmtime function
 
+    for my $method (qw(sec min hour mday mon year wday yday isdst)) {
+        is $gmtime->$method, shift @gmtime, "gmtime($time)->$method";
+    }
+}
index 357615c..5d935e7 100644 (file)
@@ -3,55 +3,33 @@
 BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
+
+    require "./test.pl";
 }
 
 BEGIN {
-    our $haslocal;
+    my $haslocal;
     eval { my $n = localtime 0 };
     $haslocal = 1 unless $@ && $@ =~ /unimplemented/;
-    unless ($haslocal) { print "1..0 # Skip: no localtime\n"; exit 0 }
-}
 
-BEGIN {
-    our @localtime = localtime 0; # This is the function localtime.
-    unless (@localtime) { print "1..0 # Skip: localtime failed\n"; exit 0 }
+    skip_all("no localtime") unless $haslocal;
 }
 
-print "1..10\n";
-
-use Time::localtime;
-
-print "ok 1\n";
-
-my $localtime = localtime 0 ; # This is the OO localtime.
-
-print "not " unless $localtime->sec   == $localtime[0];
-print "ok 2\n";
-
-print "not " unless $localtime->min   == $localtime[1];
-print "ok 3\n";
-
-print "not " unless $localtime->hour  == $localtime[2];
-print "ok 4\n";
-
-print "not " unless $localtime->mday  == $localtime[3];
-print "ok 5\n";
-
-print "not " unless $localtime->mon   == $localtime[4];
-print "ok 6\n";
-
-print "not " unless $localtime->year  == $localtime[5];
-print "ok 7\n";
-
-print "not " unless $localtime->wday  == $localtime[6];
-print "ok 8\n";
-
-print "not " unless $localtime->yday  == $localtime[7];
-print "ok 9\n";
+BEGIN {
+    my @localtime = CORE::localtime 0; # This is the function localtime.
 
-print "not " unless $localtime->isdst == $localtime[8];
-print "ok 10\n";
+    skip_all("localtime failed") unless @localtime;
+}
 
+BEGIN { plan tests => 37; }
 
+BEGIN { use_ok Time::localtime; }
 
+for my $time (0, 2**31-1, 2**33, time) {
+    my $localtime = localtime $time;          # This is the OO localtime.
+    my @localtime = CORE::localtime $time;    # This is the localtime function
 
+    for my $method (qw(sec min hour mday mon year wday yday isdst)) {
+        is $localtime->$method, shift @localtime, "localtime($time)->$method";
+    }
+}