allow undef to return from macros, fix empty string returns, test a few more cases
This commit is contained in:
parent
79e88a867a
commit
4f0663f199
4 changed files with 62 additions and 18 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
51
t/Macro.t
51
t/Macro.t
|
|
@ -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);
|
||||||
|
|
|
||||||
12
t/lib/WebGUI/Macro/MacroEmpty.pm
Normal file
12
t/lib/WebGUI/Macro/MacroEmpty.pm
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
package WebGUI::Macro::MacroEmpty;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub process {
|
||||||
|
my $session = shift;
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
12
t/lib/WebGUI/Macro/MacroUndef.pm
Normal file
12
t/lib/WebGUI/Macro/MacroUndef.pm
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
package WebGUI::Macro::MacroUndef;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub process {
|
||||||
|
my $session = shift;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue