From beb9b77440d5ddd103bf4c659a756347c33410e6 Mon Sep 17 00:00:00 2001 From: Patrick Donelan Date: Thu, 21 May 2009 08:22:29 +0000 Subject: [PATCH] Added Survey www_runTests to run and aggregate all tests Added more i18n --- ...t_import_survey_default-test-results.wgpkg | Bin 1450 -> 1947 bytes lib/WebGUI/Asset/Wobject/Survey.pm | 214 ++++++++---------- lib/WebGUI/i18n/English/Asset_Survey.pm | 60 +++++ 3 files changed, 158 insertions(+), 116 deletions(-) diff --git a/docs/upgrades/packages-7.7.7/root_import_survey_default-test-results.wgpkg b/docs/upgrades/packages-7.7.7/root_import_survey_default-test-results.wgpkg index a189079ba2ce99a90b69b510487ff23cb283bcef..fe82e9c9161e24f85f35a5a4e474e105744ca727 100644 GIT binary patch literal 1947 zcmV;M2W0pkiwFP!00000|Ls|AZ`(Ey&gcFL!e6o#sb69{sU6pY`;sL+SveVI3BdMx$MaKd|NTKe1F)fNBv{GNQA!2R}Cj5)gh{Pp*qmP^G2oiO`RBzVMx@|j+!VGt>xQoXs0xKPX+Xi*pk zfkr{`STH!odpSp_O0%*Mz%5i7zY@ilfiI`b%Y-4j{p5!pzty|ynLy4%9!Y=o9CoJ! zJz>^oH(OF69ct5?(yzK(goMOQHI=)M|JDU$~i z!B~io0vhgBBXGrx?p4QphK|~+Ucy!$!+&m=kUobcad;i_+c4RF8N}@9zE{&{_cQHb z1rr}66Q@Qw%N19Vo79d(ZbqOG6(_^_#u;ot0@yi zO=(CJlS-1OHQbIClhkCgu$e53CJU=cYWC83+IW53ssmyXXxjwms^-ryYicqUH*8+> z*cFWf^$c}+CYXf(%gl3N6jO=U&YNGNkG>krrt|jmR|B7)G~1ouvbDZE6I^i&c|Lu7 zdE$E>3-$9xwq+uC9G!Y^JYN~nekMz=iWUsRo`Rb*@~;S;fM+L=#Qk9ik?2jEWDJ)< zLYghsOsO2fy}1n7O!hJ1jD!V}^)XPrT7uSxjQr;`R7`|aK}ONwr(N^}1Xg=ucaQ82 z&>7Wad|jA-T`B2l;43Gx^^s-?$xGEu%7gyh3PtcGM>$-n1f9h zm{~8(88;NtjVl`T_sAJQGtUy>SxCy9u|t>PI^Z57hEcs=A$ z;Xm-@8lRaYUAG^ST%^IkyAyC8rFosW)ET8Ud5y|iNsI2tu2Hf_ryAUUyjF`#;z7{y zd=z4oA#IfB7GoC65k#(FO_H(eL6XFEFMtBFR2=em4>!9Usx8p(az+YV@(yF~u20W&~`EFk(^)6p$ocXJ(jMt|@FfzHK zGXXNxPQ*-V{FdrpggAjVfa6n)iSPAuh?%rJqDfU3nw`XDbc?8vY{Z1%!l|7tFR$Nv z|Jk>&jDGUkk0R!|Oie`PwNl*UE+Blq8A?HdAXp+Uk9kXd<l`tI$-G}Ad#iKNsv^=`n{K{~KgQIIYOL{nX%a|U{ zY52J+E1_TtKb)8_;>l^otwa(1N4OAed3n_B^vMl+_DanHT4GTVGv>k%f#LDh2N4_#K0BiV z$g4afqA82_@HV6cW{&T62S_z^yB7&dm_Z_Sl<5$!f1>Dla#r+{? z_>O!2m7lP5js4dC^G@@y^E^8$;bcDg%&>rmnMnC6FbcmmtP#1u*7$p#HS#4gIymhc zRwqNi)OpVpXfW1%OWrNO^Tih>PcfsoMxYU}JvTO!2|b;ubN`Fc;Gog6%+Ry2C~|za zdvfva?P?f&`IaNaX=v3Y!qu0FPgYE}LZW4z&S9t1KHRs$CfJRSgeH(AiOU>;0e%hm z)kPL$PK_lq%xlWS>SHW;Ipw#f;V~C8P2g4<*>@8Y;b;_-AGN78R-)Du{;qy$}Chk27!jioh`o> zCu-~0W}JJ@4VOn=o44Y`7Mo{tDxQoG8;mtYFzZK!l^LN3CYdYNE48%1Y5*lb*Q>a0 znkfP;Im$c)vGIFl5#UBcOc7AY38o0bOcLKPzB~-N!R%55mJTOypH?WER8}&>?5V^B zXUj`MmK<4%3@kaXY69@ji*bUN0LKG2$BSW478d#Ss)o_7{s*5XCqOZ3BE hQ174IKiW^YKY)LD;D-l(c;K5n@Gli{^Be#s004s{%KQKT literal 1450 zcmV;b1y%YViwFP!00000|Ls^^Z{j!<<#~RE#p9^un=&vg67$h*rB1~z?aae=gJ$8H#sa2l;YBUqX#)CDr{mUry$|g2H=FHtC%68ccBfq-|A~svwf?oAD&ez%eR~C~P}MAm ze5%=uYE9?MfQ4FB$$`){{#H8lTBpMh*@~P4vA0i<&^Ts9=#=dV* zFg%wGrt#jb5USd)rU7^gwZX4O@wLy@l6fu|vimPQ^u)cntKkA_6^cmlr}MA}E$IoP z-UVH#37y{p9L_jYdgU{sR}uT|3d(-a^|?}4)luz+a{t?0_(BdO^WHwzBC1p}u#k*} zIONmtpca7?0X?YAMSwyb)UM%H5yO`|CKVTu5{I{;xDS)tul<<4eH_-!+#|;xGMKzn zOrBbD896ri?`D1_uR_C~e8aDV*dhp4fdh{w0jtR+*s9W$`fD=wed6K?nH zv9Ax2)1hPvzAL9El*n|V<+S}Z`poq>SgyKn-jBIBX?Od7xLmF#QfPr2A-}1(I^mwj zLNnfUw=ATHqf_sr$F&W$Tx|USnZR(_CUbZY6l}4fh9_&rZ^)9W89X!BJ`2J>? zS}qR5*=;fXWs5z%)n-BBoX6%Ny!~(tsWELj9R% znB;ich$RW}gy0S+RHGQmMoK`@xsItn+fHsHp*-+*stIsu##(ryNJShk!4K1Sl${Be z09CgYv-F+RV~H+X?QGTVCBlVn-I1j`~aTYX{Xk2;i@J!#LdFOxm-nhQb1sB zgR+kMS205cMrdds+QbAEI)r~~eswSM{zsQ&tPVKILW{Ep@$%NDu>J&Q zyH|K(5_Z9CI2I_>8|D1gMndMS-2-$x#cg(G7wDc==0^~vZOksf#HSSLmW1|HY)|{L zi_3;HDPpvduqQ8jPYK(yi{aXq6p>rU_T-hdBSmo8_@0n^T9sV|?rBqi@W%P#4suNw z$*<+p{`nDI#LM8WcR2}fK8n@scDitxTuoOB4)=UNf&OmZ^%Qk@)5_KzGW)8>yaW1C zkAv0>W+|aJd1tz~@jK~9rXi+%FX4yptR7!IKHE#P7vL8KUKDsy;D4aNcSIHcZ~z { tab => 'display', fieldType => 'template', - label => $i18n->get('Test Results Template'), - hoverHelp => $i18n->get('Test Results Template help'), + label => $i18n->get('test results template'), + hoverHelp => $i18n->get('test results template help'), defaultValue => 'S3zpVitAmhy58CAioH359Q', namespace => 'Survey/TestResults', }, @@ -667,6 +667,7 @@ sub getAdminConsole { $ac->addSubmenuItem($self->session->url->page("func=editSurvey"), "$edit Survey"); $ac->addSubmenuItem($self->session->url->page("func=graph"), $i18n->get('survey visualization')); $ac->addSubmenuItem($self->session->url->page("func=editTestSuite"), $i18n->get("test suite")); + $ac->addSubmenuItem($self->session->url->page("func=runTests"), $i18n->get("run all tests")); return $ac; } @@ -2491,45 +2492,6 @@ sub www_editTestSuite { return $ac->render($out, 'Survey'); } -##------------------------------------------------------------------- -# -#=head2 www_editTestSuiteSave ( ) -# -#Saves the results of www_editTestSuite() -# -#=cut -# -#sub www_editTestSuiteSave { -# my $self = shift; -# my $session = $self->session; -# -# return $self->session->privilege->insufficient() -# unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') ); -# my $session = shift; -# return $session->privilege->insufficient() unless canView($session); -# my $i18n = WebGUI::International->new($session, 'Survey'); -# return www_editTestSuite($session, $i18n->get('already active')) -# if analysisActive($session); -# my $workflow = WebGUI::Workflow->new($session, 'Survey000001'); -# return www_editTestSuite($session, $i18n->get('workflow deleted')) unless defined $workflow; -# my $delta = $session->form->process('pauseInterval','integer'); -# my $activities = $workflow->getActivities(); -# ##Note, they're in order, and the order is known. -# $activities->[0]->set('deltaInterval', $delta); -# $activities->[1]->set('userId', $session->user->userId); -# my $instance = WebGUI::Workflow::Instance->create($session, { -# workflowId => $workflow->getId, -# priority => 1, -# }); -# if (!defined $instance) { -# return www_editTestSuite($session, $i18n->get('currently running')) if $session->stow->get('singletonWorkflowClash'); -# return www_editTestSuite($session, $i18n->get('error creating workflow')); -# } -# $instance->start('skipRealtime'); -# $session->db->write('update surveyStatus set startDate=NOW(), userId=?, endDate=?, running=1', [$session->user->userId, '']); -# return www_editTestSuite($session); -#} - #------------------------------------------------------------------- @@ -2670,6 +2632,25 @@ sub www_runTest { my $tap = $result->{tap} or return $self->www_editTestSuite('Unable to determine test result'); + my $parsed = $self->parseTap($tap) or return $self->www_editTestSuite('Unable to parse test output'); + + my $ac = $self->getAdminConsole; + my $edit = WebGUI::International->new($self->session, "WebGUI")->get(575); + $ac->addSubmenuItem($self->session->url->page("func=editTest;testId=$id"), "$edit Test"); + $ac->addSubmenuItem($self->session->url->page("func=runTests"), "Run All Tests"); + return $ac->render($parsed->{templateText}, 'Test Results'); +} + +=head2 parseTap + +Parses TAP and returns an object containing the TAP::Parser, the template var (containing +all interesting TAP::Parser and TAP::Parser::Result properties) and the templated text + +=cut + +sub parseTap { + my ($self, $tap) = @_; + use TAP::Parser; my $parser = TAP::Parser->new( { tap => $tap } ); @@ -2715,83 +2696,84 @@ sub www_runTest { )) { $var->{$key} = $parser->$key; } - - my $ac = $self->getAdminConsole; my $out = $self->processTemplate($var, $self->get('testResultsTemplateId') || 'S3zpVitAmhy58CAioH359Q'); - my $edit = WebGUI::International->new($self->session, "WebGUI")->get(575); - $ac->addSubmenuItem($self->session->url->page("func=editTest;testId=$id"), "$edit Test"); - return $ac->render($out, 'Test Results'); + + return { + templateText => $out, + templateVar => $var, + parser => $parser, + }; } -##------------------------------------------------------------------- -# -#=head2 www_settings ( ) -# -#Configure Test Suite settings. -# -#=cut -# -#sub www_settings { -# my $self = shift; -# my $error = shift; -# my $session = $self->session; -# -# return $self->session->privilege->insufficient() -# unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') ); -# -# if ($error) { -# $error = qq|
$error
\n|; -# } -# my $i18n = WebGUI::International->new($session, "Asset_Survey"); -# my $f = WebGUI::HTMLForm->new($session); -# $f->hidden( -# name=>'func', -# value=>'settingsSave' -# ); -# $f->integer( -# name => 'pauseInterval', -# value => $session->form->get('pauseInterval') || $session->setting->get('surveyInterval') || 300, -# label => $i18n->get('default pause interval'), -# hoverHelp => $i18n->get('default pause interval help'), -# ); -# $f->yesNo( -# name => 'deleteDelta', -# value => $session->form->get('deleteDelta') || $session->setting->get('surveyDeleteDelta') || 0, -# label => $i18n->get('Delete Delta Table?'), -# hoverHelp => $i18n->get('Delete Delta Table? help'), -# ); -# $f->yesNo( -# name => 'enabled', -# value => $session->form->get('enabled') || $session->setting->get('surveyEnabled') || 0, -# label => $i18n->get('Enabled?'), -# hoverHelp => $i18n->get('Enabled? help'), -# ); -# $f->submit(); -# my $ac = WebGUI::AdminConsole->new($session,'survey'); -# $ac->addSubmenuItem($session->url->page('surveyfunc=editTestSuite'), $i18n->get('Test Suite')); -# return $ac->render($error.$f->print, 'Test Suite Settings'); -#} -# -##------------------------------------------------------------------- -# -#=head2 www_settingsSave ( session ) -# -#Save Test Suite settings. -# -#=cut -# -#sub www_settingsSave { -# my $self = shift; -# my $session = $self->session; -# -# return $self->session->privilege->insufficient() -# my $session = shift; -# return $session->privilege->insufficient() unless canView($session); -# my $form = $session->form; -# $session->setting->set('surveyInterval', $form->process('pauseInterval', 'integer')); -# $session->setting->set('surveyDeleteDelta', $form->process('deleteDelta', 'yesNo' )); -# $session->setting->set('surveyEnabled', $form->process('enabled', 'yesNo' )); -# return www_settings($session); -#} + +#------------------------------------------------------------------- + +=head2 www_runTests ( ) + +Runs all tests + +=cut + +sub www_runTests { + my $self = shift; + my $session = $self->session; + my $i18n = WebGUI::International->new($self->session, "Asset_Survey"); + return $self->session->privilege->insufficient() + unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') ); + + my $all = WebGUI::Asset::Wobject::Survey::Test->getAllIterator($session, { sequenceKeyValue => $self->getId } ); + + # Expose TAP::Parser::Aggregate info as template variables + my $var = { + aggregate => 1, + results => [], + }; + + my @parsers; + use TAP::Parser::Aggregator; + my $aggregate = TAP::Parser::Aggregator->new; + $aggregate->start; + + while (my $test = $all->()) { + my $result = $test->run or return $self->www_editTestSuite('Unable to run test: ' . $test->getId); + my $tap = $result->{tap} or return $self->www_editTestSuite('Unable to determine test result: ' . $test->getId); + my $name = $test->get('name') || "Unnamed"; + my $parsed = $self->parseTap($tap); + push @parsers, { $name => $parsed->{parser} }; + push @{$var->{results}}, { + %{$parsed->{templateVar}}, + name => $name, + testId => $test->getId, + text => $parsed->{templateText}, + }; + } + $aggregate->stop; + + $aggregate->add( %$_ ) for @parsers; + + # add summary results + for my $key (qw( + elapsed_timestr + all_passed + get_status + failed + parse_errors + passed + skipped + todo + todo_passed + wait + exit + total + has_problems + has_errors + )) { + $var->{$key} = $aggregate->$key; + } + my $out = $self->processTemplate($var, $self->get('testResultsTemplateId') || 'S3zpVitAmhy58CAioH359Q'); + + my $ac = $self->getAdminConsole; + return $ac->render($out, $i18n->get('test results')); +} 1; diff --git a/lib/WebGUI/i18n/English/Asset_Survey.pm b/lib/WebGUI/i18n/English/Asset_Survey.pm index 01352633a..1090cf5d1 100644 --- a/lib/WebGUI/i18n/English/Asset_Survey.pm +++ b/lib/WebGUI/i18n/English/Asset_Survey.pm @@ -1559,11 +1559,21 @@ section/answer.|, lastUpdated => 0, }, + 'run test' => { + message => q{Run Test}, + lastUpdated => 0, + }, + 'test name' => { message => q{Test Name}, lastUpdated => 0, }, + 'tests run' => { + message => q{Tests Run}, + lastUpdated => 0, + }, + 'test name help' => { message => q{A descriptive name for this test}, lastUpdated => 0, @@ -1578,6 +1588,56 @@ section/answer.|, message => q{The JSON-encoded specification for your test(s)}, lastUpdated => 0, }, + + 'run all tests' => { + message => q{Run All Tests}, + lastUpdated => 0, + }, + + 'pass' => { + message => q{Pass}, + lastUpdated => 0, + }, + + 'fail' => { + message => q{Fail}, + lastUpdated => 0, + }, + + 'test results template' => { + message => q{Test Results Template}, + lastUpdated => 0, + }, + + 'test results template help' => { + message => q{Template used to display individual test and aggregate test results}, + lastUpdated => 0, + }, + + 'test results' => { + message => q{Test Results}, + lastUpdated => 0, + }, + + 'test result' => { + message => q{Test Result}, + lastUpdated => 0, + }, + + 'details' => { + message => q{Details}, + lastUpdated => 0, + }, + + 'tests passed' => { + message => q{Tests Passed}, + lastUpdated => 0, + }, + + 'tests failed' => { + message => q{Tests Failed}, + lastUpdated => 0, + }, };