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
|
require Test::Simple;
require 't/env.pm';
use strict;
my %API = (
read_pages => {
modules => [qw/Zim Zim::Selection/],
methods => [qw/
list_pages
resolve_name resolve_page get_page
/],
#get_selection search
},
write_pages => {
modules => [qw/Zim Zim::Store Zim::Store::Files/],
methods => [qw/copy_page move_page delete_page/],
},
documents => {
modules => [qw/Zim Zim::Store Zim::Store::Files/],
methods => [qw/document_root document_dir resolve_file store_file relative_path/],
},
documents_page => {
modules => [qw/Zim::Page/],
methods => [qw/document_dir resolve_file store_file relative_path/],
},
);
open LIST, 'MANIFEST' or die $!;
while (<LIST>) {
chomp;
s#^lib/## or next;
s#\.\w+##;
s#/#::#g;
push @{$API{read_pages}{modules}}, $_
if m#^Zim::Store#;
}
close LIST;
my $t = 0;
$t += scalar @{$_->{modules}} for values %API;
Test::Simple->import(tests => $t);
for my $api (keys %API) {
my @m = @{$API{$api}{methods}};
for my $mod (@{$API{$api}{modules}}) {
eval "require $mod"; die $@ if $@;
my $report = '';
for my $m (@m) {
$report .= "#\tFailed $m\(\)\n" unless $mod->can($m);
}
warn "# $mod fails '$api' API\n", $report if length $report;
ok($report eq '', "$mod supports '$api' API");
}
}
|