From 4f0663f19985c447fbf03f4b763f4ccd8c098d2d Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Tue, 16 Sep 2008 21:34:48 +0000 Subject: [PATCH] allow undef to return from macros, fix empty string returns, test a few more cases --- lib/WebGUI/Macro.pm | 5 +++- t/Macro.t | 51 +++++++++++++++++++++----------- t/lib/WebGUI/Macro/MacroEmpty.pm | 12 ++++++++ t/lib/WebGUI/Macro/MacroUndef.pm | 12 ++++++++ 4 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 t/lib/WebGUI/Macro/MacroEmpty.pm create mode 100644 t/lib/WebGUI/Macro/MacroUndef.pm diff --git a/lib/WebGUI/Macro.pm b/lib/WebGUI/Macro.pm index 57680b777..2d19b67f0 100644 --- a/lib/WebGUI/Macro.pm +++ b/lib/WebGUI/Macro.pm @@ -123,8 +123,9 @@ sub process { "Too many levels of macro recursion. Stopping."; } else { + my $d = $1; 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; } @@ -189,6 +190,8 @@ sub _processMacro { $session->log->error("Unable to process macro '$macroname': $@"); return; } + $output = '' + if !defined $output; process($session, \$output); # also need to process macros on output return $output; } diff --git a/t/Macro.t b/t/Macro.t index 0cd68d6dd..58dd9fba8 100644 --- a/t/Macro.t +++ b/t/Macro.t @@ -35,12 +35,15 @@ $session->user({user => $registeredUser}); my %originalMacros = %{ $session->config->get('macros') }; ##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', "Ex'tras", "Extras"); -plan 'no_plan'; #tests => 10; +plan tests => 33; my $macroText = "CompanyName: ^c;"; my $companyName = $session->setting->get('companyName'); @@ -206,8 +209,8 @@ tie my %quotingEdges, 'Tie::IxHash'; '^VisualMacro^VisualMacro(this);;' => '^VisualMacro@MacroCall[`this`]:;', '^VisualMacro(^VisualMacro);' => '@MacroCall[`^VisualMacro`]:', '^VisualMacro(^VisualMacro(this));' => '@MacroCall[`^VisualMacro(this)`]:', + '^VisualMacro("quotes\\");' => '@MacroCall[`"quotes"`]:', ); -my $index = 0; while (my ($inText, $outText) = each %quotingEdges) { my $procText = $inText; WebGUI::Macro::process($session, \$procText), @@ -218,27 +221,41 @@ while (my ($inText, $outText) = each %quotingEdges) { ); } -tie my %invalidCalls, 'Tie::IxHash'; -%invalidCalls = ( - '^;' => '^;', - '^();' => '^();', - '^MacroThatDoesntExist;' => '^MacroThatDoesntExist;', - "^Ex'tras;" => "^Ex'tras;", - '^Extras(;' => '^Extras(;', - '^Extras);' => '^Extras);', - '^Extras(;)' => '^Extras(;)', +my @invalidCalls = ( + '^;', + '^();', + '^MacroThatDoesntExist;', + "^Ex'tras;", + '^Extras(;', + '^Extras);', + '^Extras(;)', ); -my $index = 0; -while (my ($inText, $outText) = each %invalidCalls) { - my $procText = $inText; - WebGUI::Macro::process($session, \$procText), +for my $inText (@invalidCalls) { + my $outText = $inText; + WebGUI::Macro::process($session, \$outText), is( - $procText, $outText, + $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 { $session->config->set('macros', \%originalMacros); diff --git a/t/lib/WebGUI/Macro/MacroEmpty.pm b/t/lib/WebGUI/Macro/MacroEmpty.pm new file mode 100644 index 000000000..a6029cf41 --- /dev/null +++ b/t/lib/WebGUI/Macro/MacroEmpty.pm @@ -0,0 +1,12 @@ +package WebGUI::Macro::MacroEmpty; + +use strict; +use warnings; + +sub process { + my $session = shift; + return ""; +} + +1; + diff --git a/t/lib/WebGUI/Macro/MacroUndef.pm b/t/lib/WebGUI/Macro/MacroUndef.pm new file mode 100644 index 000000000..7c1e89b11 --- /dev/null +++ b/t/lib/WebGUI/Macro/MacroUndef.pm @@ -0,0 +1,12 @@ +package WebGUI::Macro::MacroUndef; + +use strict; +use warnings; + +sub process { + my $session = shift; + return; +} + +1; +