mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-10 08:52:39 +01:00
Make test result parsing stricter about duration formats
Summary: Fixes T8805. Explicitly require int/float for duration. Adjust XUnit/Go parsers to provide one. Test Plan: Ran unit tests. Reviewers: btrahan, joshuaspence, chad Reviewed By: chad Subscribers: jsotuyod, champo, epriestley Maniphest Tasks: T8805 Differential Revision: https://secure.phabricator.com/D13637
This commit is contained in:
parent
407954dddd
commit
5e578fb847
3 changed files with 25 additions and 7 deletions
|
@ -57,11 +57,30 @@ final class ArcanistUnitTestResult extends Phobject {
|
|||
return $this->result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the number of seconds spent executing this test.
|
||||
*
|
||||
* Reporting this information can help users identify slow tests and reduce
|
||||
* the total cost of running a test suite.
|
||||
*
|
||||
* Callers should pass an integer or a float. For example, pass `3` for
|
||||
* 3 seconds, or `0.125` for 125 milliseconds.
|
||||
*
|
||||
* @param int|float Duration, in seconds.
|
||||
* @return this
|
||||
*/
|
||||
public function setDuration($duration) {
|
||||
if (!is_int($duration) && !is_float($duration)) {
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Parameter passed to setDuration() must be an integer or a float.'));
|
||||
}
|
||||
$this->duration = $duration;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
public function getDuration() {
|
||||
return $this->duration;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ final class ArcanistGoTestResultParser extends ArcanistTestResultParser {
|
|||
// We have a passing test
|
||||
$meta = array();
|
||||
preg_match(
|
||||
'/^--- PASS: (?P<test_name>.+) \((?P<time>.+)\s*s(?:econds)?\).*/',
|
||||
'/^--- PASS: (?P<test_name>.+) \((?P<time>.+)\s*s(?:econds?)?\).*/',
|
||||
$line,
|
||||
$meta);
|
||||
|
||||
|
@ -39,8 +39,7 @@ final class ArcanistGoTestResultParser extends ArcanistTestResultParser {
|
|||
// For now set name without test case, we'll add it later
|
||||
$result->setName($meta['test_name']);
|
||||
$result->setResult(ArcanistUnitTestResult::RESULT_PASS);
|
||||
$result->setDuration($meta['time']);
|
||||
|
||||
$result->setDuration((float)$meta['time']);
|
||||
$test_case_results[] = $result;
|
||||
|
||||
continue;
|
||||
|
@ -51,14 +50,14 @@ final class ArcanistGoTestResultParser extends ArcanistTestResultParser {
|
|||
$reason = trim($test_results[$i + 1]);
|
||||
$meta = array();
|
||||
preg_match(
|
||||
'/^--- FAIL: (?P<test_name>.+) \((?P<time>.+)\s*s(?:econds)?\).*/',
|
||||
'/^--- FAIL: (?P<test_name>.+) \((?P<time>.+)\s*s(?:econds?)?\).*/',
|
||||
$line,
|
||||
$meta);
|
||||
|
||||
$result = new ArcanistUnitTestResult();
|
||||
$result->setName($meta['test_name']);
|
||||
$result->setResult(ArcanistUnitTestResult::RESULT_FAIL);
|
||||
$result->setDuration($meta['time']);
|
||||
$result->setDuration((float)$meta['time']);
|
||||
$result->setUserData($reason."\n");
|
||||
|
||||
$test_case_results[] = $result;
|
||||
|
@ -85,7 +84,7 @@ final class ArcanistGoTestResultParser extends ArcanistTestResultParser {
|
|||
$result = new ArcanistUnitTestResult();
|
||||
$result->setName($test_name);
|
||||
$result->setResult(ArcanistUnitTestResult::RESULT_PASS);
|
||||
$result->setDuration($meta['time']);
|
||||
$result->setDuration((float)$meta['time']);
|
||||
|
||||
$results[] = $result;
|
||||
} else {
|
||||
|
|
|
@ -89,7 +89,7 @@ final class ArcanistXUnitTestResultParser extends Phobject {
|
|||
$result = new ArcanistUnitTestResult();
|
||||
$result->setName($classname.'.'.$name);
|
||||
$result->setResult($status);
|
||||
$result->setDuration($time);
|
||||
$result->setDuration((float)$time);
|
||||
$result->setUserData($user_data);
|
||||
|
||||
$results[] = $result;
|
||||
|
|
Loading…
Reference in a new issue