allow undef to return from macros, fix empty string returns, test a few more cases

This commit is contained in:
Graham Knop 2008-09-16 21:34:48 +00:00
parent 79e88a867a
commit 4f0663f199
4 changed files with 62 additions and 18 deletions

View file

@ -123,8 +123,9 @@ sub process {
"Too many levels of macro recursion. Stopping."; "Too many levels of macro recursion. Stopping.";
} }
else { else {
my $d = $1;
my $replaceText = _processMacro($session, $2, $3); my $replaceText = _processMacro($session, $2, $3);
defined $replaceText ? $replaceText : $1; # processMacro returns undef on failure, use original text defined $replaceText ? $replaceText : $d; # processMacro returns undef on failure, use original text
} }
}ge; }ge;
} }
@ -189,6 +190,8 @@ sub _processMacro {
$session->log->error("Unable to process macro '$macroname': $@"); $session->log->error("Unable to process macro '$macroname': $@");
return; return;
} }
$output = ''
if !defined $output;
process($session, \$output); # also need to process macros on output process($session, \$output); # also need to process macros on output
return $output; return $output;
} }

View file

@ -35,12 +35,15 @@ $session->user({user => $registeredUser});
my %originalMacros = %{ $session->config->get('macros') }; my %originalMacros = %{ $session->config->get('macros') };
##Overwrite any local configuration so that we know how to call it. ##Overwrite any local configuration so that we know how to call it.
foreach my $macro (qw/GroupText LoginToggle PageTitle MacroStart MacroEnd MacroNest ReverseParams InfiniteMacro VisualMacro/) { foreach my $macro (qw/
GroupText LoginToggle PageTitle MacroStart MacroEnd MacroNest
ReverseParams InfiniteMacro VisualMacro MacroEmpty MacroUndef
/) {
$session->config->addToHash('macros', $macro, $macro); $session->config->addToHash('macros', $macro, $macro);
} }
$session->config->addToHash('macros', "Ex'tras", "Extras"); $session->config->addToHash('macros', "Ex'tras", "Extras");
plan 'no_plan'; #tests => 10; plan tests => 33;
my $macroText = "CompanyName: ^c;"; my $macroText = "CompanyName: ^c;";
my $companyName = $session->setting->get('companyName'); my $companyName = $session->setting->get('companyName');
@ -206,8 +209,8 @@ tie my %quotingEdges, 'Tie::IxHash';
'^VisualMacro^VisualMacro(this);;' => '^VisualMacro@MacroCall[`this`]:;', '^VisualMacro^VisualMacro(this);;' => '^VisualMacro@MacroCall[`this`]:;',
'^VisualMacro(^VisualMacro);' => '@MacroCall[`^VisualMacro`]:', '^VisualMacro(^VisualMacro);' => '@MacroCall[`^VisualMacro`]:',
'^VisualMacro(^VisualMacro(this));' => '@MacroCall[`^VisualMacro(this)`]:', '^VisualMacro(^VisualMacro(this));' => '@MacroCall[`^VisualMacro(this)`]:',
'^VisualMacro("quotes\\");' => '@MacroCall[`"quotes"`]:',
); );
my $index = 0;
while (my ($inText, $outText) = each %quotingEdges) { while (my ($inText, $outText) = each %quotingEdges) {
my $procText = $inText; my $procText = $inText;
WebGUI::Macro::process($session, \$procText), WebGUI::Macro::process($session, \$procText),
@ -218,27 +221,41 @@ while (my ($inText, $outText) = each %quotingEdges) {
); );
} }
tie my %invalidCalls, 'Tie::IxHash'; my @invalidCalls = (
%invalidCalls = ( '^;',
'^;' => '^;', '^();',
'^();' => '^();', '^MacroThatDoesntExist;',
'^MacroThatDoesntExist;' => '^MacroThatDoesntExist;', "^Ex'tras;",
"^Ex'tras;" => "^Ex'tras;", '^Extras(;',
'^Extras(;' => '^Extras(;', '^Extras);',
'^Extras);' => '^Extras);', '^Extras(;)',
'^Extras(;)' => '^Extras(;)',
); );
my $index = 0; for my $inText (@invalidCalls) {
while (my ($inText, $outText) = each %invalidCalls) { my $outText = $inText;
my $procText = $inText; WebGUI::Macro::process($session, \$outText),
WebGUI::Macro::process($session, \$procText),
is( is(
$procText,
$outText, $outText,
$inText,
"Invalid macro call: $inText", "Invalid macro call: $inText",
); );
} }
my $macroText = "^MacroEmpty;";
WebGUI::Macro::process($session, \$macroText);
is(
$macroText,
'',
"Macro can return empty string",
);
my $macroText = "^MacroUndef;";
WebGUI::Macro::process($session, \$macroText);
is(
$macroText,
'',
"Macro can return undef",
);
END { END {
$session->config->set('macros', \%originalMacros); $session->config->set('macros', \%originalMacros);

View file

@ -0,0 +1,12 @@
package WebGUI::Macro::MacroEmpty;
use strict;
use warnings;
sub process {
my $session = shift;
return "";
}
1;

View file

@ -0,0 +1,12 @@
package WebGUI::Macro::MacroUndef;
use strict;
use warnings;
sub process {
my $session = shift;
return;
}
1;