1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
package Test::YAML::Meta;
use warnings;
use strict;
use vars qw($VERSION);
$VERSION = '0.11';
#----------------------------------------------------------------------------
=head1 NAME
Test::YAML::Meta - Validation of the META.yml file in a distribution.
=head1 SYNOPSIS
There are two forms this module can be used.
The first is a standalone test of your distribution's META.yml file:
use Test::More;
eval "use Test::YAML::Meta";
plan skip_all => "Test::YAML::Meta required for testing META.yml" if $@;
meta_yaml_ok();
Note that you may provide an optional label/comment/message/etc to the
function, or one will be created automatically.
The second form allows you to test other META.yml files, or specify a specific
version you wish to test against:
use Test::More test => 6;
use Test::YAML::Meta;
# specify a file and specification version
meta_spec_ok('META.yml','1.3',$msg);
# specify the specification version to validate the local META.yml
meta_spec_ok(undef,'1.3',$msg);
# specify a file, where the specification version is deduced
# from the file itself
meta_spec_ok('META.yml',undef,$msg);
Note that this form requires you to specify the number of tests you will be
running in your test script. Also note that each 'meta_spec_ok' is actually 2
tests under the hood.
=head1 DESCRIPTION
This module was written to ensure that a META.yml file, provided with a
standard distribution uploaded to CPAN, meets the specifications that slowly
being introduced to module uploads, via the use of L<ExtUtils::MakeMaker>,
L<Module::Build> and L<Module::Install>.
=head1 ABSTRACT
A test module to validate a META.yml file.
=cut
#----------------------------------------------------------------------------
#############################################################################
#Library Modules #
#############################################################################
use Test::Builder;
use Test::YAML::Valid -Syck;
use Test::YAML::Meta::Version;
#----------------------------------------------------------------------------
my $Test = Test::Builder->new();
sub import {
my $self = shift;
my $caller = caller;
no strict 'refs';
*{$caller.'::meta_yaml_ok'} = \&meta_yaml_ok;
*{$caller.'::meta_spec_ok'} = \&meta_spec_ok;
$Test->exported_to($caller);
$Test->plan(@_);
}
#############################################################################
#Interface Functions #
#############################################################################
=head1 FUNCTIONS
=over
=item * meta_yaml_ok([$msg])
Basic META.yml wrapper around meta_spec_ok.
=cut
sub meta_yaml_ok {
$Test->plan( tests => 2 );
return meta_spec_ok(undef,undef,@_);
}
=item * meta_spec_ok($file, $version [,$msg])
Validates the named file against the given specification version. Both $file
and $version can be undefined.
=back
=cut
sub meta_spec_ok {
my ($file, $vers, $msg) = @_;
$file ||= 'META.yml';
unless($msg) {
$msg = "$file meets the designated specification";
$msg .= " ($vers)" if($vers);
}
if(my $yaml = yaml_file_ok($file)) {
my %hash;
$hash{spec} = $vers if($vers);
$hash{yaml} = $yaml;
my $spec = Test::YAML::Meta::Version->new(%hash);
if(my $result = $spec->parse()) {
$Test->ok(0,$msg);
$Test->diag(" ERR: $_") for($spec->errors);
} else {
$Test->ok(1,$msg);
}
return $yaml;
} else {
print STDERR "\n#Failed\n";
}
}
q( Currently Listening To: Blondie - "Screaming Skin" from 'No Exit');
__END__
#----------------------------------------------------------------------------
=head1 BUGS, PATCHES & FIXES
There are no known bugs at the time of this release. However, if you spot a
bug or are experiencing difficulties that are not explained within the POD
documentation, please send an email to barbie@cpan.org or submit a bug to the
RT system (http://rt.cpan.org/Public/Dist/Display.html?Name=Test-YAML-Meta).
However, it would help greatly if you are able to pinpoint problems or even
supply a patch.
Fixes are dependant upon their severity and my availablity. Should a fix not
be forthcoming, please feel free to (politely) remind me.
=head1 SEE ALSO
Test::YAML::Valid
=head1 DSLIP
b - Beta testing
d - Developer
p - Perl-only
O - Object oriented
p - Standard-Perl: user may choose between GPL and Artistic
=head1 AUTHOR
Barbie, <barbie@cpan.org>
for Miss Barbell Productions, L<http://www.missbarbell.co.uk>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2007,2008 Barbie for Miss Barbell Productions
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
|