diff --git a/t/Macro/a_account.t b/t/Macro/a_account.t new file mode 100644 index 000000000..34c86a060 --- /dev/null +++ b/t/Macro/a_account.t @@ -0,0 +1,133 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2006 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 lib "$FindBin::Bin/../lib"; + +use WebGUI::Test; +use WebGUI::Macro; +use WebGUI::Session; +use WebGUI::Macro_Config; +use HTML::TokeParser; +use Data::Dumper; + +use Test::More; # increment this value for each test you create + +my $session = WebGUI::Test->session; + +unless ($session->config->get('macros')->{'a_account'}) { + Macro_Config::insert_macro($session, 'a', 'a_account'); +} + +# +my ($versionTag, $template) = addTemplate(); + +my $homeAsset = WebGUI::Asset->getDefault($session); + +my $i18n = WebGUI::International->new($session,'Macro_a_account'); + +my @testSets = ( + { + macroText => q!^a("%s");!, + label => q!linkonly!, + template => q!!, + output => $session->url->append($homeAsset->getUrl(),'op=auth;method=init'), + comment => 'linkonly argument', + }, + { + macroText => q!^a();!, + label => $i18n->get(46), + template => q!!, + url => $session->url->page('op=auth;method=init'), ##already validated URL above + output => \&simpleHTMLParser, + comment => 'default macro call', + }, + { + macroText => q!^a("%s");!, + label => q!This is your account!, + template => q!!, + url => $session->url->page('op=auth;method=init'), + output => \&simpleHTMLParser, + comment => 'custom label', + }, + { + macroText => q!^a("%s","%s");!, + label => q!Custom label!, + template => $template->get('url'), + url => $session->url->page('op=auth;method=init'), + output => \&simpleTextParser, + comment => 'custom template', + }, +); + +my $numTests = 0; +foreach my $testSet (@testSets) { + $numTests += 1 + (ref $testSet->{output} eq 'CODE'); +} + +plan tests => $numTests; + +foreach my $testSet (@testSets) { + my $output = sprintf $testSet->{macroText}, $testSet->{label}, $testSet->{template}; + WebGUI::Macro::process($session, \$output); + if (ref $testSet->{output} eq 'CODE') { + my ($url, $label) = $testSet->{output}->($output); + is($label, $testSet->{label}, $testSet->{comment}.", label"); + is($url, $testSet->{url}, $testSet->{comment}.", url"); + } + else { + is($output, $testSet->{output}, $testSet->{comment}); + } +} + +sub addTemplate { + $session->user({userId=>3}); + my $importNode = WebGUI::Asset->getImportNode($session); + my $versionTag = WebGUI::VersionTag->getWorking($session); + $versionTag->set({name=>"a_account test"}); + my $properties = { + title => 'a_account test template', + className => 'WebGUI::Asset::Template', + url => 'a_account-test', + namespace => 'Macro/a_account', + template => "HREF=\nLABEL=", + id => 'testTemplatea_account1' + }; + my $template = $importNode->addChild($properties, $properties->{id}); + $versionTag->commit; + return ($versionTag, $template); +} + +sub simpleHTMLParser { + my ($text) = @_; + my $p = HTML::TokeParser->new(\$text); + + my $token = $p->get_tag("a"); + my $url = $token->[1]{href} || "-"; + my $label = $p->get_trimmed_text("/a"); + + return ($url, $label); +} + +sub simpleTextParser { + my ($text) = @_; + + my ($url) = $text =~ /^HREF=(.+)$/m; + my ($label) = $text =~ /^LABEL=(.+)$/m; + + return ($url, $label); +} + +END { + if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { + $versionTag->rollback; + } +}