PageRenderTime 63ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/atk4/lib/Page/Tester.php

https://github.com/intuititve/lostandfound
PHP | 151 lines | 106 code | 27 blank | 18 comment | 11 complexity | 02a7f030db51b112748fc11e848781f7 MD5 | raw file
Possible License(s): AGPL-3.0
  1. <?php
  2. class Page_Tester extends Page {
  3. public $variances=array();
  4. public $input;
  5. public $responses=array();
  6. /** Redefine this to the value generated by a test */
  7. public $proper_responses=null;
  8. function setVariance($arr){
  9. $this->variances=$arr;
  10. foreach($arr as $key=>$item){
  11. if(is_numeric($key))$key=$item;
  12. $this->grid->addColumn('html',$key.'_inf',$key.' info');
  13. $this->grid->addColumn('html,wrap',$key.'_res',$key.' result');
  14. }
  15. }
  16. function init(){
  17. parent::init();
  18. $this->grid=$this->add('Grid');
  19. $this->grid->addColumn('text','name');
  20. //$this->setVariance(array('GiTemplate','SMlite'));
  21. $this->setVariance(array('Test'));
  22. $this->runTests();
  23. $f=$this->add('Form');
  24. $ff=$f->addField('text','responses');
  25. $this->responses=
  26. ' public $proper_responses=array(
  27. '.join(',
  28. ',$this->responses).'
  29. );';
  30. $ff->set($this->responses);
  31. $ff->js('click')->select();
  32. }
  33. function runTests($test_obj=null){
  34. if(!$test_obj)$test_obj=$this;
  35. $tested=array();
  36. $data=array();
  37. foreach(get_class_methods($test_obj) as $method){
  38. $m='';
  39. if(substr($method,0,5)=='test_'){
  40. $m=substr($method,5);
  41. }elseif(substr($method,0,8)=='prepare_'){
  42. $m=substr($method,8);
  43. }else continue;
  44. // Do not retest same function even if it has both prepare and test
  45. if($tested[$m])continue;$tested[$m]=true;
  46. // Row contains test result data
  47. $row=array('name'=>$m,'id'=>$m);
  48. foreach($this->variances as $key=>$vari){
  49. if(is_numeric($key))$key=$vari;
  50. // Input is a result of preparation function
  51. if(method_exists($test_obj,'prepare_'.$m)){
  52. $input=$test_obj->{'prepare_'.$m}($vari,$method);
  53. }else{
  54. $input=$test_obj->prepare($vari,$method);
  55. }
  56. $this->input=$input;
  57. $test_func=method_exists($test_obj,'test_'.$m)?
  58. 'test_'.$m:'test';
  59. // Test speed
  60. $me=memory_get_peak_usage();
  61. $ms=microtime(true);
  62. /*
  63. $limit=20;$hl=round($limit /2);
  64. for($i=0;$i<$limit;$i++){
  65. //$result=call_user_func_array(array($test_obj,$test_func),$input);
  66. */
  67. try{
  68. $result=(string)$test_obj->$test_func($input[0],$input[1],$input[2]);
  69. }catch (Exception $e){
  70. if($_GET['tester_details']==$row['name'] && $_GET['vari']==$vari){
  71. throw $e;
  72. }
  73. $result='Exception: '.(method_exists($e,'getText')?
  74. $e->getText():
  75. $e->getMessage());
  76. $ll=$this->add('P');
  77. $v=$ll->add('View')
  78. ->setElement('a')
  79. ->setAttr('href','#')
  80. ->set('More details')
  81. ->js('click')->univ()->frameURL('Exception Details for test '.$row['name'],
  82. $this->api->url(null,array('tester_details'=>$row['name'],'vari'=>$vari)))
  83. ;
  84. $result.=$ll->getHTML();
  85. }
  86. //$this->$method($vari);
  87. /*
  88. if($i==$hl){
  89. $meh=memory_get_peak_usage();
  90. }
  91. */
  92. //}
  93. $ms=microtime(true)-$ms;
  94. $me=($mend=memory_get_peak_usage())-$me;
  95. $row[$key.'_inf']='Speed: '.round($ms,3).'<br/>Memory: '.$me;
  96. $result=$this->formatResult($row,$key,$result);
  97. $k=$key.'_'.$row['name'];
  98. if($this->proper_responses[$k]==$result && isset($this->proper_responses[$k])){
  99. $row[$key.'_res']='<font color="green">PASS</font><br/>'.var_export($row[$key.'_res'],true);
  100. }elseif($this->proper_responses[$k]){
  101. $row[$key.'_res']='<font color="red">'.var_export($row[$key.'_res'],true).'</font><br/>'.
  102. var_export($this->proper_responses[$k],true);
  103. }
  104. $this->responses[]='"'.$k.'"'.'=>'.addslashes(var_export($result,true));
  105. }
  106. $data[]=$row;
  107. }
  108. $this->grid->setStaticSource($data);
  109. }
  110. function formatResult(&$row,$key,$result){
  111. $row[$key.'_res']=$result;
  112. return $result;
  113. }
  114. function expect($value,$expectation){
  115. return $value==$expectation?'OK':'ERR';
  116. }
  117. function _prepare($t,$str){
  118. $result='';
  119. for($i=0;$i<100;$i++){
  120. $result.=$str;
  121. }
  122. return array($this->add($t),$result);
  123. }
  124. }