[Apologies -- I hit the send button prematurely by mistake when trying to click on something else. Continuing...]

I just got bit by an annoying problem, at least part of which highlights a reason why I think that encouraging people to blindly add boilerplate pod_coverage.t files is not a good practice. Or, more constructively, I'd like to suggest that the way boilerplate pod_coverage.t file are recommended be changed.

Description of the problem:

* A prereq module of mine uses a pod_coverage.t file, similar to what Module::Starter::PBP recommends:

use Test::More;
eval "use Test::Pod::Coverage 1.04";
plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" 
if $@;
all_pod_coverage_ok();

* The module in question needs a Pod::Coverage of at least 0.16 given the style of documentation it uses

* Test::Pod::Coverage has Pod::Coverage prereq of 0

Clearly the module author had a sufficiently high Pod::Coverage to pass (as did I). However, anyone trying to install with an older version of Pod::Coverage will fail the coverage test. The skip_all doesn't help because it only checks that Test::Pod::Coverage exists, not that Pod::Coverage is actually sufficient to pass the tests, and Test::Pod::Coverage doesn't care what underlying Pod::Coverage is used.

Side nit, the docs for Test::Pod::Coverage don't even recommend checking for the latest Test::Pod::Coverage to address its bugs:

use Test::More;
eval "use Test::Pod::Coverage 1.00";
plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage" 
if $@;
all_pod_coverage_ok();

Leaving aside the old flame war point about whether end users ought to be running coverage checks with all the associated dependency issues that have nothing to do with whether the module works correctly (with my bias here clearly evident), if we have to have boilerplate pod coverage tests, I'd much rather see boilerplate like this, that highlights the Pod::Coverage dependency, too:

  use Test::More;
  # MODULE AUTHORS: UPDATE VERSIONS BELOW TO MATCH YOUR CONFIGURATION
  eval "use Pod::Coverage 0.17 ()";
plan skip_all => "Pod::Coverage 0.17 required for testing POD coverage" if $@;
  eval "use Test::Pod::Coverage 1.06";
plan skip_all => "Test::Pod::Coverage 1.06 required for testing POD coverage" if $@;
  all_pod_coverage_ok();

Thoughts? If we can get a consensus on this or a similar approach, then perhaps we can get it consistently used across Module::Starter and friends, ExtUtils::ModuleMaker and friends, and CPANTS documentation.

Sincerely,
David Golden

Reply via email to