App-makefilepl2cpanfile
view release on metacpan or search on metacpan
t/edge_cases.t view on Meta::CPAN
} 'invalid UTF-8 bytes in Makefile.PL do not crash generate()';
like $out, qr/Carp/, 'valid dep before invalid bytes is captured correctly';
ok scalar @warnings > 0,
'invalid UTF-8 bytes trigger warnings from slurp_utf8 (not silent corruption)';
diag "Warning count: " . scalar(@warnings) if $ENV{TEST_VERBOSE};
};
subtest 'parse_prereqs: extreme numerical version strings â _has_version contract' => sub {
# Verify that unusual-but-valid number strings (Inf, NaN, very large ints)
# are handled consistently by the looks_like_number + != 0 logic.
# These are "real constraints" (non-zero) even if nonsensical in practice.
Readonly my @EXTREME_NONZERO_VERS => (
[ 'Inf', 1, 'Inf is looks_like_number and != 0' ],
[ '-Inf', 1, '-Inf is looks_like_number and != 0' ],
[ 'NaN', 1, 'NaN is looks_like_number and != 0 (IEEE 754)'],
[ '99999999999999999999', 1, '20-digit int overflows to ~1e20, != 0' ],
[ '0.000000001', 1, 'tiny positive fraction is non-zero' ],
[ '1e300', 1, 'very large float is non-zero' ],
);
Readonly my @EXTREME_ZERO_VERS => (
[ '0.000', 0, 'leading zeros â numerically zero' ],
[ '+0', 0, 'explicit positive zero is still zero' ],
);
for my $case (@EXTREME_NONZERO_VERS) {
t/edge_cases.t view on Meta::CPAN
# source of Makefile.PL must NEVER be evaluated. The regex captures only
# the leading digit sequence; 9**9**9 becomes version '9', not Inf or error.
my $content = "PREREQ_PM => { \x27Module\x27 => 9**9**9 },";
my $result;
lives_ok { $result = App::makefilepl2cpanfile::parse_prereqs($content) }
'Perl expression as version does not crash or eval';
my $ver = $result->{runtime}{requires}{'Module'}{version} // 'undef';
ok defined $ver, 'version field is defined (regex captured leading digits)';
unlike "$ver", qr/Inf|NaN/i, 'captured version is not Inf/NaN (no eval occurred)';
ok $ver =~ /^\d/, 'captured version starts with a digit â just the literal text';
diag "Captured version for 9**9**9: $ver" if $ENV{TEST_VERBOSE};
};
subtest 'generate: reference as existing arg â no crash, no spurious develop merge' => sub {
# A reference passed as existing stringifies silently to e.g. "ARRAY(0x...)"
# which the develop-block regex cannot match. No warnings are emitted and
# no develop block should appear in the output.
my $g = empty_home();
( run in 1.212 second using v1.01-cache-2.11-cpan-e86d8f7595a )