webgui/t/i18n/help.t
2009-02-20 23:47:30 +00:00

145 lines
4.2 KiB
Perl

#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 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
#-------------------------------------------------------------------
use FindBin;
use strict;
use warnings;
use lib "$FindBin::Bin/../lib"; ##t/lib
use WebGUI::Test;
use WebGUI::Operation::Help;
use WebGUI::International;
use WebGUI::Session;
use Data::Dumper;
#The goal of this test is to verify all the i18n labels in
#the help files. It used to be glommed into the same test as
#the code scanner, but was broken out due to speed issues.
use Test::More; # increment this value for each test you create
my $numTests = 0;
my $session = WebGUI::Test->session;
my @helpFileSet = WebGUI::Operation::Help::_getHelpFilesList($session);
my %helpTable;
foreach my $helpSet (@helpFileSet) {
my $helpName = $helpSet->[1];
my $help = WebGUI::Operation::Help::_load($session, $helpName);
$helpTable{ $helpName } = $help;
}
##Scan #1, find all labels in the help system. body, title, @fields
## Array of hashes
## each hash will have:
## topic -> which help file it is from
## entry -> which entry in the help file
## tag -> which tag in the entry in the help file
## namespace -> which help file it is form
## label -> which help file it is form
my @helpLabels;
my @sqlLabels;
my @libLabels;
my @objLabels;
@helpLabels = getHelpLabels();
$numTests = scalar(@helpLabels);
plan tests => $numTests;
my $i18n = WebGUI::International->new($session);
foreach my $label ( @helpLabels ) {
ok($i18n->get(@{ $label }{qw(label namespace )} ),
sprintf "label: %s->%s inside %s->%s->%s", @{ $label }{'namespace', 'label', 'topic', 'entry', 'tag', });
}
sub getHelpLabels {
my %seenLabel = ();
my @helpLabels = ();
foreach my $topic ( keys %helpTable ) {
foreach my $entry ( keys %{ $helpTable{$topic} }) {
##Check the title and body data
push @helpLabels, {
topic=>$topic,
entry=>$entry,
tag=>'title',
namespace=>$topic, ##default
label=>$helpTable{$topic}{$entry}{'title'},
} unless $seenLabel{$topic}{$helpTable{$topic}{$entry}{'title'}}++;
if ($helpTable{$topic}{$entry}{'body'} and ref $helpTable{$topic}{$entry}{'body'} ne 'CODE') {
push @helpLabels, {
topic=>$topic,
entry=>$entry,
tag=>'body',
namespace=>$topic, ##default
label=>$helpTable{$topic}{$entry}{'body'},
} unless $seenLabel{$topic}{$helpTable{$topic}{$entry}{'title'}}++;
}
##Add all labels in the fields array
foreach my $field (@{ $helpTable{$topic}{$entry}{fields} }) {
push @helpLabels, {
topic=>$topic,
entry=>$entry,
tag=>'fields',
namespace=>$field->{namespace},
label=>$field->{title},
} unless $seenLabel{$field->{namespace}}{$field->{title}}++;
push @helpLabels, {
topic=>$topic,
entry=>$entry,
tag=>'fields',
namespace=>$field->{namespace},
label=>$field->{description},
} unless $seenLabel{$field->{namespace}}{$field->{description}}++;
}
my $variableEntries = getHelpVariables($helpTable{$topic}{$entry}{variables});
foreach my $variable ( @{ $variableEntries } ) {
my $namespace = exists $variable->{namespace} ? $variable->{namespace} : $topic;
my $one = {
topic=>$topic,
entry=>$entry,
tag=>'variables',
namespace=>$namespace,
};
if ($variable->{description}) {
$one->{label} = $variable->{description},
}
else {
$one->{label} = $variable->{name},
}
push @helpLabels, $one
unless $seenLabel{$namespace}{$one->{label}}++;
}
}
}
return @helpLabels;
}
sub getHelpVariables {
my ($variables) = @_; ##An arrayref of variables, possibly with nested variables in loops
my $tmplVars = [];
foreach my $var ( @{ $variables } ) {
if ( exists $var->{variables} ) {
push @{ $tmplVars }, @{ getHelpVariables($var->{variables}) };
delete $var->{variables};
}
push @{ $tmplVars }, $var;
}
return $tmplVars;
}