#============================================================= -*-perl-*- # # t/vmethods/text.t # # Testing scalar (text) virtual variable methods. # # Written by Andy Wardley <abw@cpan.org> # # Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved. # # This is free software; you can redistribute it and/or modify it # under the same terms as Perl itself. # # $Id$ # #======================================================================== use strict; use warnings; use lib qw( ./lib ../lib ../../lib ); use Template::Test; # make sure we're using the Perl stash $Template::Config::STASH = 'Template::Stash'; # define a new text method $Template::Stash::SCALAR_OPS->{ commify } = sub { local $_ = shift; my $c = shift || ","; my $n = int(shift || 3); return $_ if $n<1; 1 while s/^([-+]?\d+)(\d{$n})/$1$c$2/; return $_; }; my $tt = Template->new(); my $tc = $tt->context(); # define vmethods using define_vmethod() interface. $tc->define_vmethod( item => commas => $Template::Stash::SCALAR_OPS->{ commify } ); my $params = { undef => undef, zero => 0, one => 1, animal => 'cat', string => 'The cat sat on the mat', spaced => ' The dog sat on the log', word => 'bird', # The bird is the word WORD => 'BIRD', the_bird => "\n The bird\n is the word \n ", quotable => "Tim O'Reilly said \"Oh really?\"", markup => 'a < b > & c "d" \'e\'', }; test_expect(\*DATA, undef, $params); __DATA__ -- test -- -- name text.defined implicit undef -- [% notdef.defined ? 'def' : 'undef' %] -- expect -- undef -- test -- -- name text.defined explicit undef -- [% undef.defined ? 'def' : 'undef' %] -- expect -- undef -- test -- -- name text.defined zero -- [% zero.defined ? 'def' : 'undef' %] -- expect -- def -- test -- -- name text.defined one -- [% one.defined ? 'def' : 'undef' %] -- expect -- def -- test -- -- name string.length -- [% string.length %] -- expect -- 22 -- test -- -- name text.upper -- [% string.upper %] -- expect -- THE CAT SAT ON THE MAT -- test -- -- name text.lower -- [% string.lower %] -- expect -- the cat sat on the mat -- test -- -- name text.ucfirst -- [% word.ucfirst %] [% WORD.ucfirst %] [% WORD.lower.ucfirst %] -- expect -- Bird BIRD Bird -- test -- -- name text.lcfirst -- [% word.lcfirst %] [% WORD.lcfirst %] -- expect -- bird bIRD -- test -- -- name text.trim -- >[% the_bird.trim %]< -- expect -- >The bird is the word< -- test -- -- name text.collapse -- >[% the_bird.collapse %]< -- expect -- >The bird is the word< -- test -- -- name text.sort.join -- [% string.sort.join %] -- expect -- The cat sat on the mat -- test -- -- name text.split.join a -- [% string.split.join('_') %] -- expect -- The_cat_sat_on_the_mat -- test -- -- name text.split.join b -- [% string.split(' ', 3).join('_') %] -- expect -- The_cat_sat on the mat -- test -- -- name text.split.join c -- [% spaced.split.join('_') %] -- expect -- The_dog_sat_on_the_log -- test -- -- name text.split.join d -- [% spaced.split(' ').join('_') %] -- expect -- __The_dog_sat_on_the_log -- test -- -- name text.list -- [% string.list.join %] -- expect -- The cat sat on the mat -- test -- -- name text.hash -- [% string.hash.value %] -- expect -- The cat sat on the mat -- test -- -- name text.size -- [% string.size %] -- expect -- 1 -- test -- -- name text.squote -- [% quotable %] [% quotable.squote %] -- expect -- Tim O'Reilly said "Oh really?" Tim O\'Reilly said "Oh really?" -- test -- -- name text.dquote -- [% quotable %] [% quotable.dquote %] -- expect -- Tim O'Reilly said "Oh really?" Tim O'Reilly said \"Oh really?\" -- test -- -- name text.html -- [% markup.html %] -- expect -- a < b > & c "d" 'e' -- test -- -- name text.xml -- [% markup.xml %] -- expect -- a < b > & c "d" 'e' -- test -- -- name text.repeat -- [% animal.repeat(3) %] -- expect -- catcatcat -- test -- -- name text.search -- [% animal.search('at$') ? "found 'at\$'" : "didn't find 'at\$'" %] -- expect -- found 'at$' -- test -- -- name text.search -- [% animal.search('^at') ? "found '^at'" : "didn't find '^at'" %] -- expect -- didn't find '^at' -- test -- -- name text.match an -- [% text = 'bandanna'; text.match('an') ? 'match' : 'no match' %] -- expect -- match -- test -- -- name text.match on -- [% text = 'bandanna'; text.match('on') ? 'match' : 'no match' %] -- expect -- no match -- test -- -- name text.match global an -- [% text = 'bandanna'; text.match('an', 1).size %] matches -- expect -- 2 matches -- test -- -- name text.match global an -- [% text = 'bandanna' -%] matches are [% text.match('an+', 1).join(', ') %] -- expect -- matches are an, ann -- test -- -- name text.match global on -- [% text = 'bandanna'; text.match('on+', 1) ? 'match' : 'no match' %] -- expect -- no match -- test -- -- name: text substr method -- [% text = 'Hello World' -%] a: [% text.substr(6) %]! b: [% text.substr(0, 5) %]! c: [% text.substr(0, 5, 'Goodbye') %]! d: [% text %]! -- expect -- a: World! b: Hello! c: Goodbye World! d: Hello World! -- test -- -- name: another text substr method -- [% text = 'foo bar baz wiz waz woz' -%] a: [% text.substr(4, 3) %] b: [% text.substr(12) %] c: [% text.substr(0, 11, 'FOO') %] d: [% text %] -- expect -- a: bar b: wiz waz woz c: FOO wiz waz woz d: foo bar baz wiz waz woz -- test -- -- name: text.remove -- [% text = 'hello world!'; text.remove('\s+world') %] -- expect -- hello! -- test -- -- name chunk left -- [% string = 'TheCatSatTheMat' -%] [% string.chunk(3).join(', ') %] -- expect -- The, Cat, Sat, The, Mat -- test -- -- name chunk leftover -- [% string = 'TheCatSatonTheMat' -%] [% string.chunk(3).join(', ') %] -- expect -- The, Cat, Sat, onT, heM, at -- test -- -- name chunk right -- [% string = 'TheCatSatTheMat' -%] [% string.chunk(-3).join(', ') %] -- expect -- The, Cat, Sat, The, Mat -- test -- -- name chunk rightover -- [% string = 'TheCatSatonTheMat' -%] [% string.chunk(-3).join(', ') %] -- expect -- Th, eCa, tSa, ton, The, Mat -- test -- -- name chunk ccard -- [% ccard_no = "1234567824683579"; ccard_no.chunk(4).join %] -- expect -- 1234 5678 2468 3579 -- test -- [% string = 'foo' -%] [% string.repeat(3) %] -- expect -- foofoofoo -- test -- [% string1 = 'foobarfoobarfoo' string2 = 'foobazfoobazfoo' -%] [% string1.search('bar') ? 'ok' : 'not ok' %] [% string2.search('bar') ? 'not ok' : 'ok' %] [% string1.replace('bar', 'baz') %] [% string2.replace('baz', 'qux') %] -- expect -- ok ok foobazfoobazfoo fooquxfooquxfoo -- test -- [% string1 = 'foobarfoobarfoo' string2 = 'foobazfoobazfoo' -%] [% string1.match('bar') ? 'ok' : 'not ok' %] [% string2.match('bar') ? 'not ok' : 'ok' %] -- expect -- ok ok -- test -- [% string = 'foo bar ^%$ baz' -%] [% string.replace('\W+', '_') %] -- expect -- foo_bar_baz -- test -- [% var = 'value99' ; var.replace('value', '') %] -- expect -- 99 -- test -- [% bob = "0" -%] bob: [% bob.replace('0','') %]. -- expect -- bob: . -- test -- [% string = 'The cat sat on the mat'; match = string.match('The (\w+) (\w+) on the (\w+)'); -%] [% match.0 %].[% match.1 %]([% match.2 %]) -- expect -- cat.sat(mat) -- test -- [% string = 'The cat sat on the mat' -%] [% IF (match = string.match('The (\w+) sat on the (\w+)')) -%] matched animal: [% match.0 %] place: [% match.1 %] [% ELSE -%] no match [% END -%] [% IF (match = string.match('The (\w+) shat on the (\w+)')) -%] matched animal: [% match.0 %] place: [% match.1 %] [% ELSE -%] no match [% END -%] -- expect -- matched animal: cat place: mat no match -- test -- [% big_num = "1234567890"; big_num.commify %] -- expect -- 1,234,567,890 -- test -- [% big_num = "1234567890"; big_num.commify(":", 2) %] -- expect -- 12:34:56:78:90 -- test -- [% big_num = "1234567812345678"; big_num.commify(" ", 4) %] -- expect -- 1234 5678 1234 5678 -- test -- [% big_num = "hello world"; big_num.commify %] -- expect -- hello world -- test -- [% big_num = "1234567890"; big_num.commas %] -- expect -- 1,234,567,890