00001 <?php
00013 abstract class STestReporter extends SObject
00014 {
00015
00016 const STATUS_OK = 1;
00017 const STATUS_WARNING = 2;
00018 const STATUS_ERROR = 3;
00019
00020 private static $attribtues = array();
00021 private static $status = self::STATUS_OK;
00022 public static $reporting = false;
00023
00030 public static function init() {
00031 if (!isset($_GET['runTestSuite'])) return;
00032
00033 register_shutdown_function(array('STestReporter', 'printTestReport'));
00034 self::$status = self::STATUS_OK;
00035 self::$reporting = true;
00036 }
00037
00047 public static function register($key, $value) {
00048 if ($value === true) $value = 'true';
00049 if ($value === false) $value = 'false';
00050 if (isset(self::$attribtues[$key])) {
00051 if (is_array(self::$attribtues[$key]))
00052 self::$attribtues []= $value;
00053 else
00054 self::$attribtues = array(self::$attribtues, $value);
00055 } else {
00056 self::$attribtues[$key] = $value;
00057 }
00058 }
00059
00068 public static function renderTestSuiteReport($data) {
00069 $bt = debug_backtrace();
00070 $name = 'controller';
00071 if (isset($bt[0]['class']))
00072 $name = $bt[0]['class'];
00073 $out = '';
00074 $out .= '<!-- <testSuiteReport name="' . $name . '">';
00075 $out .= '<status>' . self::$status . '</status>';
00076 $out .= self::renderTestSuiteReportRec($data);
00077 $out .= '</testSuiteReport> -->
00078 ';
00079 return $out;
00080 }
00081
00086 protected static function renderTestSuiteReportRec($data) {
00087 $out = '';
00088 foreach($data as $name => $value) {
00089 $out .= '<' . $name . '>';
00090 if (is_array($value)) {
00091 $out .= self::renderTestSuiteReportRec($value);
00092 } else {
00093 $out .= (string)$value;
00094 }
00095 $out .= '</' . $name . '>';
00096 }
00097 return $out;
00098 }
00099
00105 public static function registerErrors() {
00106 $errCount = count(SErrorManager::getAllErrors());
00107 $warnCount = count(SErrorManager::getAllWarnings());
00108 if ($warnCount > 0)
00109 self::registerStatus(self::STATUS_WARNING);
00110 if ($errCount > 0)
00111 self::registerStatus(self::STATUS_ERROR);
00112 STestReporter::register('SErrorManager.errorCount', $errCount);
00113 STestReporter::register('SErrorManager.warningCount', $warnCount);
00114 }
00115
00125 public static function registerStatus($status) {
00126 if ($status > self::$status) self::$status = $status;
00127 }
00128
00137 public static function statusToString($status) {
00138 switch((int)$status) {
00139 case self::STATUS_ERROR:
00140 return 'Page has error(s)';
00141 case self::STATUS_WARNING:
00142 return 'Page has warning(s)';
00143 case self::STATUS_OK:
00144 return 'Page is OK';
00145 default:
00146 return 'Unknown status ' . $status;
00147 }
00148 }
00149
00153 public static function printTestReport() {
00154 self::registerErrors();
00155 print(self::renderTestSuiteReport(self::$attribtues));
00156 }
00157 }
00158
00159 ?>