diff --git a/lib/WebGUI/Operation/Help.pm b/lib/WebGUI/Operation/Help.pm index 60b9d06e2..5c0db570c 100644 --- a/lib/WebGUI/Operation/Help.pm +++ b/lib/WebGUI/Operation/Help.pm @@ -61,9 +61,15 @@ sub _linkTOC { #------------------------------------------------------------------- sub _getHelpFilesList { - my $dir = $session{config}{webguiRoot}.$session{os}{slash}."lib".$session{os}{slash}."WebGUI".$session{os}{slash}."Help"; + my $dir = join $session{os}{slash}, $session{config}{webguiRoot},"lib","WebGUI","Help"; opendir (DIR,$dir) or WebGUI::ErrorHandler::fatal("Can't open Help directory!"); - my @files = grep { /^_Help/ } grep { /\.pm$/} readdir(DIR); + my @files; + foreach my $file (readdir DIR) { + next unless $file =~ /.pm$/; + my $modName; + ($modName = $file) =~ s/\.pm$//; + push @files, [ $file, $modName ]; + } closedir(DIR); return @files; } @@ -118,16 +124,14 @@ sub www_viewHelpIndex { my @helpIndex; my $i; my @files = _getHelpFilesList(); - foreach my $file (@files) { - if ($file =~ /(.*?)\.pm$/) { - my $namespace = $1; - my $help = _load($namespace); - foreach my $key (keys %{$help}) { - push @helpIndex, [$namespace, $key, - WebGUI::International::get($help->{$key}{title},$namespace)]; - $i++; - } - } + foreach my $fileSet (@files) { + my $namespace = $fileSet->[1]; + my $help = _load($namespace); + foreach my $key (keys %{$help}) { + push @helpIndex, [$namespace, $key, + WebGUI::International::get($help->{$key}{title},$namespace)]; + $i++; + } } my $output = '
'; my $halfway = round($i/2); @@ -155,8 +159,8 @@ sub www_viewHelpTOC { my @files = _getHelpFilesList(); my $third = round(@files/3 + 0.50); my @entries; - foreach my $file (@files) { - $file =~ s/\.pm$//; + foreach my $fileSet (@files) { + my $file = $fileSet->[1]; push @entries, [_getHelpName($file), $file]; } $i = 0; diff --git a/t/help_compiled.t b/t/help_compiled.t new file mode 100644 index 000000000..1ee6af78c --- /dev/null +++ b/t/help_compiled.t @@ -0,0 +1,64 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2005 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +# ---- BEGIN DO NOT EDIT ---- +use strict; +use lib '../lib'; +use Getopt::Long; +use WebGUI::Session; +use WebGUI::Operation::Help; +use File::Find; +# ---- END DO NOT EDIT ---- + +#The goal of this test is to verify that all entries in the lib/WebGUI/Help +#directory compile. This test is necessary because WebGUI::Operation::Help +#will return an empty hash if it won't compile, and the help will simply +#disappear. + +use Test::More; +my $numTests = 0; + +initialize(); # this line is required + +my @helpFileSet = WebGUI::Operation::Help::_getHelpFilesList(); + +$numTests = scalar @helpFileSet; #One for each help compile + +diag("Planning on running $numTests tests\n"); + +plan tests => $numTests; + +foreach my $helpSet (@helpFileSet) { + my $helpName = $helpSet->[1]; + my $help = WebGUI::Operation::Help::_load($helpName); + ok(keys %{ $help }, "$helpName compiled"); +} + +# put your tests here + +cleanup(); # this line is required + + +# ---- DO NOT EDIT BELOW THIS LINE ----- + +sub initialize { + $|=1; # disable output buffering + my $configFile; + GetOptions( + 'configFile=s'=>\$configFile + ); + exit 1 unless ($configFile); + WebGUI::Session::open("..",$configFile); +} + +sub cleanup { + WebGUI::Session::close(); +} + diff --git a/t/help_related.t b/t/help_related.t new file mode 100644 index 000000000..7ccf83229 --- /dev/null +++ b/t/help_related.t @@ -0,0 +1,82 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2005 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +# ---- BEGIN DO NOT EDIT ---- +use strict; +use lib '../lib'; +use Getopt::Long; +use WebGUI::Session; +use WebGUI::Operation::Help; +use File::Find; +# ---- END DO NOT EDIT ---- + +#The goal of this test is to verify that all entries in the lib/WebGUI/Help +#directory correctly resolve to other Help entries. The total number of +#tests will be dynamic, based on how many "related" entries are set up +#in the Help files. Calling Test::plan will be delayed. + +use Test::More; +my $numTests = 0; + +initialize(); # this line is required + +my @helpFileSet = WebGUI::Operation::Help::_getHelpFilesList(); + +my %helpTable; + +foreach my $helpSet (@helpFileSet) { + my $helpName = $helpSet->[1]; + my $help = WebGUI::Operation::Help::_load($helpName); + $helpTable{ $helpName } = $help; +} + +##Scan #1, how many tests do we expect? + +my @relatedHelp = (); +foreach my $topic ( keys %helpTable ) { + foreach my $entry ( keys %{ $helpTable{$topic} }) { + my @related = @{ $helpTable{$topic}{$entry}{related} }; + push @relatedHelp, @related; + $numTests += scalar @related; + } +} + +diag("Planning on running $numTests tests\n"); + +plan tests => $numTests; + +##Each array element is a hash with two keys, tag (entry) and namespace (topic). + +foreach my $related (@relatedHelp) { + my ($topic, $entry) = @{ $related }{'namespace', 'tag'}; + ok( exists $helpTable{$topic}{$entry}, "Help entry: $topic -> $entry"); +} + +# put your tests here + +cleanup(); # this line is required + + +# ---- DO NOT EDIT BELOW THIS LINE ----- + +sub initialize { + $|=1; # disable output buffering + my $configFile; + GetOptions( + 'configFile=s'=>\$configFile + ); + exit 1 unless ($configFile); + WebGUI::Session::open("..",$configFile); +} + +sub cleanup { + WebGUI::Session::close(); +} +