X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2F00-load.t;h=95b3511607d302f4da606b808a70b3930ccfc018;hb=3e2936a37e08e6c669a969984361f7d761efd074;hp=a154c7a9dd12cc38ee30a50876caa5bdf8c684f8;hpb=8263f5bdb4959100fbff494be03f8fc1b8c73de1;p=koha.git diff --git a/t/00-load.t b/t/00-load.t index a154c7a9dd..95b3511607 100644 --- a/t/00-load.t +++ b/t/00-load.t @@ -1,11 +1,36 @@ -# This script is called by the pre-commit git hook to test modules compile +#!/usr/bin/perl + +# This file is part of Koha. +# +# Copyright (c) 2016 Mark Tompsett -- is_testable() +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; -use strict; -use warnings; use Test::More; use File::Spec; use File::Find; +use English qw( -no_match_vars ); + +=head1 DESCRIPTION + +00-load.t: This script is called by the pre-commit git hook to test modules compile +=cut + +# Loop through the C4:: modules my $lib = File::Spec->rel2abs('C4'); find({ bydepth => 1, @@ -13,27 +38,16 @@ find({ wanted => sub { my $m = $_; return unless $m =~ s/[.]pm$//; + $m =~ s{^.*/C4/}{C4/}; $m =~ s{/}{::}g; return if $m =~ /Auth_with_ldap/; # Dont test this, it will fail on use - return if $m =~ /Cache/; # Cache modules are a WIP, add the tests back when we are using them more - return if $m =~ /SIP/; # SIP modules will not load clean - return if $m =~ /C4::VirtualShelves$/; # Requires a DB - return if $m =~ /C4::Auth$/; # DB - return if $m =~ /C4::Tags$/; # DB - return if $m =~ /C4::Service/; # DB - return if $m =~ /C4::Auth_with_cas/; # DB - return if $m =~ /C4::BackgroundJob/; # DB - return if $m =~ /C4::UploadedFile/; # DB - return if $m =~ /C4::Record/; # DB - return if $m =~ /C4::Reports::Guided/; # DB - return if $m =~ /C4::Serials/; # DB - return if $m =~ /C4::VirtualShelves::Page/; # DB - return if $m =~ /C4::Members::Statistics/; # DB + return if $m =~ /SIPServer/; # SIP Server module has old package usage use_ok($m) || BAIL_OUT("***** PROBLEMS LOADING FILE '$m'"); }, }, $lib); +# Loop through the Koha:: modules $lib = File::Spec->rel2abs('Koha'); find( { @@ -44,13 +58,54 @@ find( return unless $m =~ s/[.]pm$//; $m =~ s{^.*/Koha/}{Koha/}; $m =~ s{/}{::}g; - return if $m =~ /Koha::SearchEngine::/; # Koha::SearchEngine::* are experimental - return if $m =~ /Koha::Cache::Memcached/; # optional dependency - use_ok($m) || BAIL_OUT("***** PROBLEMS LOADING FILE '$m'"); + if ( is_testable($m) ) { + use_ok($m) || BAIL_OUT("***** PROBLEMS LOADING FILE '$m'"); + } }, }, $lib ); +# Optional modules are causing checks to fail +# This checks for the particular modules to determine +# if the testing is possible or not. +# +# Returns 1 if possible, 0 if not. +sub is_testable { + my ($module_name) = @_; + my @needed_module_names; + my $return_value = 1; + if ( $module_name =~ /Koha::NorwegianPatronDB/xsm ) { + @needed_module_names = + ( 'SOAP::Lite', 'Crypt::GCrypt', 'Digest::SHA', 'Convert::BaseN' ); + } + elsif ( $module_name =~ /Koha::SearchEngine::Elasticsearch::Indexer/xsm ) { + @needed_module_names = + ( 'Catmandu::Importer::MARC', 'Catmandu::Store::ElasticSearch' ); + } + elsif ( $module_name =~ /Koha::SearchEngine::Elasticsearch::Search/xsm ) { + @needed_module_names = ( 'Catmandu::Store::ElasticSearch' ); + } + elsif ( $module_name =~ /Koha::SearchEngine::Elasticsearch/xsm ) { + @needed_module_names = ( 'Search::Elasticsearch' ); + } + elsif ( $module_name =~ /^Koha::ExternalContent/xsm ) { + @needed_module_names = ( 'WebService::ILS' ); + } + foreach my $current_name (@needed_module_names) { + my $relative_pathname = $current_name; + $relative_pathname =~ s/::/\//gxsm; + $relative_pathname .= '.pm'; + my $check_result = eval { require "$relative_pathname"; 1; }; + if ($EVAL_ERROR) { + diag( +"Skipping testing of $module_name, because $current_name is not installed." + ); + $return_value = 0; + } + } + return $return_value; +} done_testing(); +