From 381d51822fccaa333cbd0ab9fca8b69f650c05f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= 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 to perl 5.28.2. Signed-off-by: Petr Písař --- 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