use Test::More; use Test::Exception; use strict; use warnings; BEGIN { my ($name) = eval{getpwuid($<)} || $ENV{USERNAME}; $name = $name && $name=~/^(\w+)$/ ? $1 : 'guest'; open my $fh, '>', "tmp$$.ini"; print $fh qq{ [TL] trap = none [DB] type = mysql Default = DBR1 [DBR1] host = localhost user = $name dbname = test }; close $fh; eval q{use Tripletail "tmp$$.ini"}; } END { unlink "tmp$$.ini"; } eval { require DBD::mysql; 1; }; $@ and plan skip_all => "no DBD::mysql"; my $planned; eval { $TL->trapError( -DB => 'DB', -main => \&main, ); }; if ($@) { if (not $planned) { plan skip_all => "Failed to connect to local MySQL: $@"; } else { die $@; } } sub trim ($) { $_ = shift; s/^\s*|\s*$//mg; $_; } sub main { my $TMPL = q{ ←前ページ ←前ページ <&PAGENUM> <&PAGENUM> 次ページ→ 次ページ→ ... 全<&MAXROWS>件 <&FIRSTROW>件目から <&LASTROW>件目までを表示中 全<&MAXPAGES>ページ 現在<&CURPAGE>ページ目 ... <&FOO> <&BAR> <&BAZ> ... 一件もありません 最大ページ数は<&MAXPAGES>です。 }; my $ANS = q{ ←前ページ 1 2 3 4 次ページ→ ... 全100件 1件目から 30件目までを表示中 全4ページ 現在1ページ目 ... 0 WWW EEE 1 WWW EEE 2 WWW EEE 3 WWW EEE 4 WWW EEE 5 WWW EEE 6 WWW EEE 7 WWW EEE 8 WWW EEE 9 WWW EEE 10 WWW EEE 11 WWW EEE 12 WWW EEE 13 WWW EEE 14 WWW EEE 15 WWW EEE 16 WWW EEE 17 WWW EEE 18 WWW EEE 19 WWW EEE 20 WWW EEE 21 WWW EEE 22 WWW EEE 23 WWW EEE 24 WWW EEE 25 WWW EEE 26 WWW EEE 27 WWW EEE 28 WWW EEE 29 WWW EEE ... }; plan tests => 86; $planned = 1; my $DB; $DB = $TL->getDB('DB'); $DB->setDefaultSet('Default'); $DB->begin; $DB->execute(q{ DROP TABLE IF EXISTS TripletaiL_DB_Test }); $DB->execute(q{ CREATE TABLE TripletaiL_DB_Test ( foo BLOB, bar BLOB, baz BLOB ) }); for(my $i = 0;$i < 100;$i++){ $DB->execute( \'Default' => q{ INSERT INTO TripletaiL_DB_Test (foo, bar, baz) VALUES (?, ?, ? ) }, $i, 'WWW', 'EEE'); } $DB->commit; my $pager; ok($pager = $TL->newPager($DB), 'newPager'); ok($pager->setCurrentPage(1), 'setCurrentPage'); my $t = $TL->newTemplate; $t->setTemplate($TMPL); dies_ok {$pager->paging} 'paging die'; dies_ok {$pager->paging(\123)} 'paging die'; dies_ok {$pager->paging($t)} 'paging die'; dies_ok {$pager->paging($t->node('paging'))} 'paging die'; dies_ok {$pager->paging($t->node('paging'),\123)} 'paging die'; dies_ok {$pager->paging($t->node('paging'),['SELECT * FROM TripletaiL_DB_Test',\123])} 'paging die'; dies_ok {$pager->paging($t->node('paging'),['SELECT * FROM TripletaiL_DB_Test',-10])} 'paging die'; my $paging; ok($pager = $TL->newPager($DB), 'newPager'); ok($paging = $pager->paging($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'),'paging'); if(!defined($paging)) { my $info = $pager->getPagingInfo; $t->node('overpage')->add(MAXPAGES => $info->{maxpages}); } elsif($paging == 0) { $t->node('nodata')->add; } else { $t->node('paging')->add; } is(trim $t->getHtml, trim $ANS, 'paging (1)'); ok(my $info = $pager->getPagingInfo,'getPagingInfo'); is(ref($info->{db}),'Tripletail::DB','db'); is($info->{pagesize},30,'pagesize'); is($info->{current},1,'current'); is($info->{maxlinks},10,'maxlinks'); is($info->{formkey},'pageid','formkey'); #is($info->{formparam},undef,'formparam'); is($info->{pagingtype},0,'pagingtype'); is($info->{maxpages},4,'maxpage'); is($info->{linkstart},1,'linkstart'); is($info->{linkend},4,'linkend'); is($info->{maxrows},100,'maxrows'); is($info->{beginrow},0,'beginrow'); is($info->{rows},30,'rows'); ok($pager->setCurrentPage(2), 'setCurrentPage'); ok($paging = $pager->paging($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'),'paging'); ok($pager->setCurrentPage(3), 'setCurrentPage'); ok($paging = $pager->paging($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'),'paging'); ok($pager->setCurrentPage(4), 'setCurrentPage'); ok($paging = $pager->paging($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'),'paging'); is($pager->paging($t->node('paging'),['SELECT * FROM TripletaiL_DB_Test',0]), 0 ,'setCurrentPage'); ok($pager = $TL->newPager, 'newPager'); ok($pager = $TL->newPager('DB'), 'newPager (obsolute)'); ok($pager = $TL->newPager($DB), 'newPager'); dies_ok {$pager->setDbGroup(\123)} 'setDbGroup die (obsolute)'; ok($pager->setDbGroup('DB'), 'setDbGroup (obsolute)'); dies_ok {$pager->setPageSize} 'setPageSize die'; dies_ok {$pager->setPageSize(\123)} 'setPageSize die'; dies_ok {$pager->setPageSize('aaa')} 'setPageSize die'; dies_ok {$pager->setPageSize(0)} 'setPageSize die'; dies_ok {$pager->setPageSize(-10)} 'setPageSize die'; ok($pager->setPageSize(100), 'setPageSize'); dies_ok {$pager->setCurrentPage} 'setCurrentPage die'; dies_ok {$pager->setCurrentPage(\123)} 'setCurrentPage die'; dies_ok {$pager->setCurrentPage('aaa')} 'setCurrentPage die'; dies_ok {$pager->setCurrentPage(0)} 'setCurrentPage die'; dies_ok {$pager->setCurrentPage(-10)} 'setCurrentPage die'; ok($pager->setCurrentPage(2), 'setCurrentPage'); dies_ok {$pager->setMaxLinks} 'setMaxLinks die'; dies_ok {$pager->setMaxLinks(\123)} 'setMaxLinks die'; dies_ok {$pager->setMaxLinks('aaa')} 'setMaxLinks die'; dies_ok {$pager->setMaxLinks(0)} 'setMaxLinks die'; dies_ok {$pager->setMaxLinks(-10)} 'setMaxLinks die'; ok($pager->setMaxLinks(1), 'setMaxLinks'); dies_ok {$pager->setFormKey} 'setFormKey die'; dies_ok {$pager->setFormKey(\123)} 'setFormKey die'; ok($pager->setFormKey('PAGE'), 'setFormKey'); dies_ok {$pager->setFormParam(\123)} 'setFormKey die'; ok($pager->setFormParam($TL->newForm(ddd => 666)), 'setFormKey'); ok($pager->setFormParam({ddd => 666}), 'setFormKey'); dies_ok {$pager->setToLink(\123)} 'setToLink die'; ok($pager->setToLink('PAGE'), 'setToLink'); dies_ok {$pager->setPagingType} 'setPagingType die'; dies_ok {$pager->setPagingType(\123)} 'setPagingType die'; dies_ok {$pager->setPagingType('aaa')} 'setPagingType die'; dies_ok {$pager->setPagingType(2)} 'setPagingType die'; dies_ok {$pager->setPagingType(-10)} 'setPagingType die'; ok($pager->setPagingType(1), 'setPagingType'); my $TMPL2 = q{ ←前ページ ←前ページ <&PAGENUM> <&PAGENUM> 次ページ→ 次ページ→ ... <&FOO> <&BAR> <&BAZ> ... 一件もありません 最大ページ数は<&MAXPAGES>です。 }; $t->setTemplate($TMPL2); ok($paging = $pager->pagingArray($t->node('paging'), ['SELECT * FROM TripletaiL_DB_Test',100]),'pagingArray'); if(!defined($paging)) { $info = $pager->getPagingInfo; $t->node('overpage')->add(MAXPAGES => $info->{maxpages}); } elsif($paging == 0) { $t->node('nodata')->add; } else { foreach my $key (@$paging){ $t->node('paging')->add(FOO => $key->[0],BAR => $key->[1],BAZ => $key->[2],); } } $t->setTemplate($TMPL2); ok($paging = $pager->pagingHash($t->node('paging'), ['SELECT * FROM TripletaiL_DB_Test',100]),'pagingHash'); if(!defined($paging)) { $info = $pager->getPagingInfo; $t->node('overpage')->add(MAXPAGES => $info->{maxpages}); } elsif($paging == 0) { $t->node('nodata')->add; } else { foreach my $key (@$paging){ $t->node('paging')->add(FOO => $key->{foo},BAR => $key->{bar},BAZ => $key->{baz},); } } $t->setTemplate($TMPL); $pager = $TL->newPager('DB'); ok($pager->setCurrentPage(5), 'setCurrentPage'); is($pager->paging($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'), undef ,'paging'); $t->setTemplate($TMPL); $pager = $TL->newPager('DB'); ok($pager->setCurrentPage(5), 'setCurrentPage'); is($pager->pagingArray($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'), undef ,'pagingArray'); $t->setTemplate($TMPL); $pager = $TL->newPager('DB'); ok($pager->setCurrentPage(5), 'setCurrentPage'); is($pager->pagingHash($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'), undef ,'pagingHash'); $t->setTemplate($TMPL); $pager = $TL->newPager('DB'); ok($pager->setPagingType(1), 'setPagingType'); ok($pager->setCurrentPage(5), 'setCurrentPage'); ok($pager->paging($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'), 'paging'); $t->setTemplate($TMPL); $pager = $TL->newPager('DB'); ok($pager->setPagingType(1), 'setPagingType'); ok($pager->setCurrentPage(5), 'setCurrentPage'); ok($pager->pagingArray($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'), 'pagingArray'); $t->setTemplate($TMPL); $pager = $TL->newPager('DB'); ok($pager->setPagingType(1), 'setPagingType'); ok($pager->setCurrentPage(5), 'setCurrentPage'); ok($pager->pagingHash($t->node('paging'), 'SELECT * FROM TripletaiL_DB_Test'), 'pagingHash'); $DB->execute(q{ DROP TABLE TripletaiL_DB_Test }); }