2011-01-09 15:22:25 -08:00
|
|
|
<?php
|
|
|
|
|
2011-02-19 11:36:08 -08:00
|
|
|
/**
|
|
|
|
* Represents the outcome of running a unit test.
|
|
|
|
*
|
|
|
|
* @group unit
|
|
|
|
*/
|
2012-01-31 12:07:05 -08:00
|
|
|
final class ArcanistUnitTestResult {
|
2011-01-09 15:22:25 -08:00
|
|
|
|
|
|
|
const RESULT_PASS = 'pass';
|
|
|
|
const RESULT_FAIL = 'fail';
|
|
|
|
const RESULT_SKIP = 'skip';
|
|
|
|
const RESULT_BROKEN = 'broken';
|
|
|
|
const RESULT_UNSOUND = 'unsound';
|
2011-03-21 17:29:12 -07:00
|
|
|
const RESULT_POSTPONED = 'postponed';
|
2011-01-09 15:22:25 -08:00
|
|
|
|
|
|
|
private $namespace;
|
|
|
|
private $name;
|
2012-09-06 18:44:15 -07:00
|
|
|
private $link;
|
2011-01-09 15:22:25 -08:00
|
|
|
private $result;
|
2011-07-03 23:31:14 -07:00
|
|
|
private $duration;
|
2011-01-09 15:22:25 -08:00
|
|
|
private $userData;
|
2012-08-15 10:34:29 -07:00
|
|
|
private $extraData;
|
2012-01-31 12:07:19 -08:00
|
|
|
private $coverage;
|
2011-01-09 15:22:25 -08:00
|
|
|
|
|
|
|
public function setName($name) {
|
|
|
|
$this->name = $name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getName() {
|
|
|
|
return $this->name;
|
|
|
|
}
|
|
|
|
|
2012-09-06 18:44:15 -07:00
|
|
|
public function setLink($link) {
|
|
|
|
$this->link = $link;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getLink() {
|
|
|
|
return $this->link;
|
|
|
|
}
|
|
|
|
|
2011-01-09 15:22:25 -08:00
|
|
|
public function setResult($result) {
|
|
|
|
$this->result = $result;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getResult() {
|
|
|
|
return $this->result;
|
|
|
|
}
|
|
|
|
|
2012-09-13 13:25:26 -07:00
|
|
|
public function getConsoleFormattedResult() {
|
|
|
|
static $status_codes = array(
|
|
|
|
self::RESULT_PASS => '<bg:green>** PASS **</bg>',
|
|
|
|
self::RESULT_FAIL => '<bg:red>** FAIL **</bg>',
|
|
|
|
self::RESULT_SKIP => '<bg:yellow>** SKIP **</bg>',
|
|
|
|
self::RESULT_BROKEN => '<bg:red>** BROKEN **</bg>',
|
|
|
|
self::RESULT_UNSOUND => '<bg:yellow>** UNSOUND **</bg>',
|
|
|
|
self::RESULT_POSTPONED => '<bg:yellow>** POSTPONED **</bg>',
|
|
|
|
);
|
|
|
|
return phutil_console_format($status_codes[$this->result]);
|
|
|
|
}
|
|
|
|
|
2011-07-03 23:31:14 -07:00
|
|
|
public function setDuration($duration) {
|
|
|
|
$this->duration = $duration;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getDuration() {
|
|
|
|
return $this->duration;
|
|
|
|
}
|
|
|
|
|
2011-01-09 15:22:25 -08:00
|
|
|
public function setUserData($user_data) {
|
|
|
|
$this->userData = $user_data;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getUserData() {
|
|
|
|
return $this->userData;
|
|
|
|
}
|
|
|
|
|
2012-08-15 10:34:29 -07:00
|
|
|
/**
|
|
|
|
* "extra data" allows an implementation to store additional
|
|
|
|
* key/value metadata along with the result of the test run.
|
|
|
|
*/
|
|
|
|
public function setExtraData(array $extra_data = null) {
|
|
|
|
$this->extraData = $extra_data;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getExtraData() {
|
|
|
|
return $this->extraData;
|
|
|
|
}
|
|
|
|
|
2012-01-31 12:07:19 -08:00
|
|
|
public function setCoverage($coverage) {
|
|
|
|
$this->coverage = $coverage;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getCoverage() {
|
|
|
|
return $this->coverage;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Merge several coverage reports into a comprehensive coverage report.
|
|
|
|
*
|
|
|
|
* @param list List of coverage report strings.
|
|
|
|
* @return string Cumulative coverage report.
|
|
|
|
*/
|
|
|
|
public static function mergeCoverage(array $coverage) {
|
2012-03-12 17:04:51 -07:00
|
|
|
if (empty($coverage)) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2012-01-31 12:07:19 -08:00
|
|
|
$base = reset($coverage);
|
|
|
|
foreach ($coverage as $more_coverage) {
|
|
|
|
$len = min(strlen($base), strlen($more_coverage));
|
|
|
|
for ($ii = 0; $ii < $len; $ii++) {
|
|
|
|
if ($more_coverage[$ii] == 'C') {
|
|
|
|
$base[$ii] = 'C';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $base;
|
|
|
|
}
|
|
|
|
|
2011-01-09 15:22:25 -08:00
|
|
|
}
|