Page MenuHomec4science

DifferentialUnitFieldSpecification.php
No OneTemporary

File Metadata

Created
Wed, Apr 16, 00:58

DifferentialUnitFieldSpecification.php

<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class DifferentialUnitFieldSpecification
extends DifferentialFieldSpecification {
public function shouldAppearOnRevisionView() {
return true;
}
public function renderLabelForRevisionView() {
return 'Unit:';
}
public function getRequiredDiffProperties() {
return array('arc:unit', 'arc:unit-excuse');
}
private function getUnitExcuse() {
$excuse = $this->getDiffProperty('arc:unit-excuse');
$excuse = phutil_escape_html($excuse);
$excuse = nl2br($excuse);
$excuse_markup = '';
if (strlen($excuse)) {
$excuse_markup = '<p>Explanation for failure(s): </p>'.
'<span class="unit-excuse">'.$excuse.'</span>';
}
return $excuse_markup;
}
public function renderValueForRevisionView() {
$diff = $this->getDiff();
$ustar = DifferentialRevisionUpdateHistoryView::renderDiffUnitStar($diff);
$umsg = DifferentialRevisionUpdateHistoryView::getDiffUnitMessage($diff);
$postponed_count = 0;
$udata = $this->getDiffProperty('arc:unit');
$utail = null;
$have_details = false;
if ($udata) {
$unit_messages = array();
foreach ($udata as $test) {
$name = idx($test, 'name');
$result = idx($test, 'result');
if ($result != DifferentialUnitTestResult::RESULT_POSTPONED &&
$result != DifferentialUnitTestResult::RESULT_PASS) {
$engine = PhabricatorMarkupEngine::newDifferentialMarkupEngine();
$userdata = phutil_utf8_shorten(idx($test, 'userdata'), 512);
$userdata = $engine->markupText($userdata);
if ($userdata != '') {
$have_details = true;
}
$unit_messages[] =
'<li>'.
'<span class="unit-result-'.phutil_escape_html($result).'">'.
phutil_escape_html(ucwords($result)).
'</span>'.
' '.
phutil_escape_html($name).
javelin_render_tag(
'div',
array(
'sigil' => 'differential-field-detail',
'style' => 'display: none;',
),
$userdata).
'</li>';
} else if ($result == DifferentialUnitTestResult::RESULT_POSTPONED) {
$postponed_count++;
}
}
$uexcuse = $this->getUnitExcuse();
if ($unit_messages) {
$utail =
'<div class="differential-unit-block">'.
$uexcuse.
'<ul>'.
implode("\n", $unit_messages).
'</ul>'.
'</div>';
}
}
if ($postponed_count > 0 &&
$diff->getUnitStatus() == DifferentialUnitStatus::UNIT_POSTPONED) {
$umsg = $postponed_count.' '.$umsg;
}
Javelin::initBehavior('differential-show-field-details');
if ($have_details) {
$umsg .= ' - '.javelin_render_tag(
'a',
array(
'href' => '#details',
'sigil' => 'differential-show-field-details',
),
'Details');
}
return $ustar.' '.$umsg.$utail;
}
}

Event Timeline