Blob Blame History Raw
From 381d51822fccaa333cbd0ab9fca8b69f650c05f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Fri, 14 Feb 2020 14:10:10 +0100
Subject: [PATCH] Only pass 2-digit years to tests when testing 2-digit year
 handling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This will start breaking in 2020 if done without working around the whole
breakpoint thing. See https://rt.cpan.org/Ticket/Display.html?id=124787.

Ported from Time-Local 63265fd81c7f6177bf28dfe0d1ada9cb897de566 commit
by Dave Rolsky <autarch@urth.org> to perl 5.28.2.

Signed-off-by: Petr Písař <ppisar@redhat.com>
---
 cpan/Time-Local/t/Local.t | 40 +++++++++++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t
index 6341396..701d22d 100644
--- a/cpan/Time-Local/t/Local.t
+++ b/cpan/Time-Local/t/Local.t
@@ -85,19 +85,17 @@ my $epoch_is_64
 
 for ( @time, @neg_time ) {
     my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_;
-    $year -= 1900;
     $mon--;
 
 SKIP: {
         skip '1970 test on VOS fails.', 12
-            if $^O eq 'vos' && $year == 70;
+            if $^O eq 'vos' && $year == 1970;
         skip 'this platform does not support negative epochs.', 12
-            if $year < 70 && !$neg_epoch_ok;
+            if $year < 1970 && !$neg_epoch_ok;
 
         # Test timelocal()
         {
-            my $year_in = $year < 70 ? $year + 1900 : $year;
-            my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in );
+            my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year );
 
             my ( $s, $m, $h, $D, $M, $Y ) = localtime($time);
 
@@ -106,13 +104,12 @@ SKIP: {
             is( $h, $hour,     "timelocal hour for @$_" );
             is( $D, $mday,     "timelocal day for @$_" );
             is( $M, $mon,      "timelocal month for @$_" );
-            is( $Y, $year,     "timelocal year for @$_" );
+            is( $Y, $year - 1900,     "timelocal year for @$_" );
         }
 
         # Test timegm()
         {
-            my $year_in = $year < 70 ? $year + 1900 : $year;
-            my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in );
+            my $time = timegm( $sec, $min, $hour, $mday, $mon, $year );
 
             my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time);
 
@@ -121,14 +118,13 @@ SKIP: {
             is( $h, $hour,     "timegm hour for @$_" );
             is( $D, $mday,     "timegm day for @$_" );
             is( $M, $mon,      "timegm month for @$_" );
-            is( $Y, $year,     "timegm year for @$_" );
+            is( $Y, $year - 1900,     "timegm year for @$_" );
         }
     }
 }
 
 for (@bad_time) {
     my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_;
-    $year -= 1900;
     $mon--;
 
     eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) };
@@ -229,6 +225,30 @@ SKIP:
     );
 }
 
+# 2-digit years
+{
+	my $current_year = ( localtime() )[5];
+	my $pre_break    = ( $current_year + 49 ) - 100;
+	my $break        = ( $current_year + 50 ) - 100;
+	my $post_break   = ( $current_year + 51 ) - 100;
+
+	is(
+		( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ),
+		$pre_break + 100,
+		"year $pre_break is treated as next century",
+	);
+	is(
+		( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ),
+		$break + 100,
+		"year $break is treated as next century",
+	);
+	is(
+		( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ),
+		$post_break,
+		"year $post_break is treated as current century",
+	);
+}
+
 SKIP:
 {
     skip 'These tests only run for the package maintainer.', 8
-- 
2.21.1