From: Eric Wong Date: Thu, 17 Aug 2023 07:23:10 +0000 (+0000) Subject: t/nntp.t: attempt to quiet spurious uninitialized warnings X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=574bca21a001773d1bf4c5418a856a172b318d88;p=thirdparty%2Fpublic-inbox.git t/nntp.t: attempt to quiet spurious uninitialized warnings When running via t/run.perl ("make check-run") to reduce test startup time, t/nntp.t occasionally hits uninitialized variable warnings in the quote_str sub. I can't reproduce these reliably, but scoping subs in tests reduces the chance of conflict when we reuse interpreters. --- diff --git a/t/nntp.t b/t/nntp.t index 655af3982..0d3384d7e 100644 --- a/t/nntp.t +++ b/t/nntp.t @@ -1,72 +1,69 @@ -# Copyright (C) 2015-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ -use strict; -use warnings; -use Test::More; +use v5.12; use PublicInbox::TestCommon; use PublicInbox::Eml; require_mods(qw(DBD::SQLite Data::Dumper)); use_ok 'PublicInbox::NNTP'; -use_ok 'PublicInbox::Inbox'; use PublicInbox::Config; +use POSIX qw(strftime); { - sub quote_str { + my $quote_str = sub { my (undef, $s) = split(/ = /, Data::Dumper::Dumper($_[0]), 2); $s =~ s/;\n//; $s; - } + }; - sub wm_prepare { + my $wm_prepare = sub { my ($wm) = @_; my $orig = qq{'$wm'}; PublicInbox::NNTP::wildmat2re($_[0]); - my $new = quote_str($_[0]); + my $new = $quote_str->($_[0]); ($orig, $new); - } + }; - sub wildmat_like { + my $wildmat_like = sub { my ($str, $wm) = @_; - my ($orig, $new) = wm_prepare($wm); + my ($orig, $new) = $wm_prepare->($wm); like($str, $wm, "$orig matches '$str' using $new"); - } + }; - sub wildmat_unlike { + my $wildmat_unlike = sub { my ($str, $wm, $check_ex) = @_; if ($check_ex) { use re 'eval'; my $re = qr/$wm/; like($str, $re, "normal re with $wm matches, but ..."); } - my ($orig, $new) = wm_prepare($wm); + my ($orig, $new) = $wm_prepare->($wm); unlike($str, $wm, "$orig does not match '$str' using $new"); - } + }; - wildmat_like('[foo]', '[\[foo\]]'); - wildmat_like('any', '*'); - wildmat_unlike('bar.foo.bar', 'foo.*'); + $wildmat_like->('[foo]', '[\[foo\]]'); + $wildmat_like->('any', '*'); + $wildmat_unlike->('bar.foo.bar', 'foo.*'); # no code execution - wildmat_unlike('HI', '(?{"HI"})', 1); - wildmat_unlike('HI', '[(?{"HI"})]', 1); + $wildmat_unlike->('HI', '(?{"HI"})', 1); + $wildmat_unlike->('HI', '[(?{"HI"})]', 1); } { - sub ngpat_like { + my $ngpat_like = sub { my ($str, $pat) = @_; my $orig = $pat; PublicInbox::NNTP::ngpat2re($pat); like($str, $pat, "'$orig' matches '$str' using $pat"); - } + }; - ngpat_like('any', '*'); - ngpat_like('a.s.r', 'a.t,a.s.r'); - ngpat_like('a.s.r', 'a.t,a.s.*'); + $ngpat_like->('any', '*'); + $ngpat_like->('a.s.r', 'a.t,a.s.r'); + $ngpat_like->('a.s.r', 'a.t,a.s.*'); } { - use POSIX qw(strftime); - sub time_roundtrip { + my $time_roundtrip = sub { my ($date, $time, $gmt) = @_; my $m = join(' ', @_); my $ts = PublicInbox::NNTP::parse_time(@_); @@ -77,12 +74,12 @@ use PublicInbox::Config; } is_deeply([$d, $t], [$date, $time], "roundtripped: $m"); $ts; - } - my $x1 = time_roundtrip(qw(20141109 060606 GMT)); - my $x2 = time_roundtrip(qw(141109 060606 GMT)); - my $x3 = time_roundtrip(qw(930724 060606 GMT)); - my $x5 = time_roundtrip(qw(710101 000000)); - my $x6 = time_roundtrip(qw(720101 000000)); + }; + my $x1 = $time_roundtrip->(qw(20141109 060606 GMT)); + my $x2 = $time_roundtrip->(qw(141109 060606 GMT)); + my $x3 = $time_roundtrip->(qw(930724 060606 GMT)); + my $x5 = $time_roundtrip->(qw(710101 000000)); + my $x6 = $time_roundtrip->(qw(720101 000000)); SKIP: { skip('YYMMDD test needs updating', 6) if (time > 0x7fffffff); # our world probably ends in 2038, but if not we'll try to @@ -90,7 +87,7 @@ use PublicInbox::Config; is($x1, $x2, 'YYYYMMDD and YYMMDD parse identically'); is(strftime('%Y', gmtime($x3)), '1993', '930724 was in 1993'); - my $epoch = time_roundtrip(qw(700101 000000 GMT)); + my $epoch = $time_roundtrip->(qw(700101 000000 GMT)); is($epoch, 0, 'epoch parsed correctly'); ok($x6 > $x5, '1972 > 1971'); ok($x5 > $epoch, '1971 > Unix epoch');