public function renderDiffPropertyViewValue(DifferentialDiff $diff)
 {
     $colors = array(DifferentialUnitStatus::UNIT_NONE => 'grey', DifferentialUnitStatus::UNIT_OKAY => 'green', DifferentialUnitStatus::UNIT_WARN => 'yellow', DifferentialUnitStatus::UNIT_FAIL => 'red', DifferentialUnitStatus::UNIT_SKIP => 'blue', DifferentialUnitStatus::UNIT_AUTO_SKIP => 'blue');
     $icon_color = idx($colors, $diff->getUnitStatus(), 'grey');
     $message = DifferentialRevisionUpdateHistoryView::getDiffUnitMessage($diff->getUnitStatus());
     $status = id(new PHUIStatusListView())->addItem(id(new PHUIStatusItemView())->setIcon(PHUIStatusItemView::ICON_STAR, $icon_color)->setTarget($message));
     return $status;
 }
 protected function renderHarbormasterStatus(DifferentialDiff $diff, array $messages)
 {
     $colors = array(DifferentialUnitStatus::UNIT_NONE => 'grey', DifferentialUnitStatus::UNIT_OKAY => 'green', DifferentialUnitStatus::UNIT_WARN => 'yellow', DifferentialUnitStatus::UNIT_FAIL => 'red', DifferentialUnitStatus::UNIT_SKIP => 'blue', DifferentialUnitStatus::UNIT_AUTO_SKIP => 'blue', DifferentialUnitStatus::UNIT_POSTPONED => 'blue');
     $icon_color = idx($colors, $diff->getUnitStatus(), 'grey');
     $message = DifferentialRevisionUpdateHistoryView::getDiffUnitMessage($diff);
     $note = array();
     $groups = mgroup($messages, 'getResult');
     $groups = array_select_keys($groups, array(ArcanistUnitTestResult::RESULT_FAIL, ArcanistUnitTestResult::RESULT_BROKEN, ArcanistUnitTestResult::RESULT_UNSOUND, ArcanistUnitTestResult::RESULT_SKIP, ArcanistUnitTestResult::RESULT_PASS)) + $groups;
     foreach ($groups as $result => $group) {
         $count = new PhutilNumber(count($group));
         switch ($result) {
             case ArcanistUnitTestResult::RESULT_PASS:
                 $note[] = pht('%s Passed Test(s)', $count);
                 break;
             case ArcanistUnitTestResult::RESULT_FAIL:
                 $note[] = pht('%s Failed Test(s)', $count);
                 break;
             case ArcanistUnitTestResult::RESULT_SKIP:
                 $note[] = pht('%s Skipped Test(s)', $count);
                 break;
             case ArcanistUnitTestResult::RESULT_BROKEN:
                 $note[] = pht('%s Broken Test(s)', $count);
                 break;
             case ArcanistUnitTestResult::RESULT_UNSOUND:
                 $note[] = pht('%s Unsound Test(s)', $count);
                 break;
             default:
                 $note[] = pht('%s Other Test(s)', $count);
                 break;
         }
     }
     $buildable = $diff->getBuildable();
     if ($buildable) {
         $full_results = '/harbormaster/unit/' . $buildable->getID() . '/';
         $note[] = phutil_tag('a', array('href' => $full_results), pht('View Full Results'));
     }
     $excuse = $diff->getProperty('arc:unit-excuse');
     if (strlen($excuse)) {
         $excuse = array(phutil_tag('strong', array(), pht('Excuse:')), ' ', phutil_escape_html_newlines($excuse));
         $note[] = $excuse;
     }
     $note = phutil_implode_html(" · ", $note);
     $status = id(new PHUIStatusListView())->addItem(id(new PHUIStatusItemView())->setIcon(PHUIStatusItemView::ICON_STAR, $icon_color)->setTarget($message)->setNote($note));
     return $status;
 }
 public static function getDiffUnitMessage(DifferentialDiff $diff)
 {
     switch ($diff->getUnitStatus()) {
         case DifferentialUnitStatus::UNIT_NONE:
             return pht('No Unit Test Coverage');
         case DifferentialUnitStatus::UNIT_OKAY:
             return pht('Unit Tests OK');
         case DifferentialUnitStatus::UNIT_WARN:
             return pht('Unit Test Warnings');
         case DifferentialUnitStatus::UNIT_FAIL:
             return pht('Unit Test Errors');
         case DifferentialUnitStatus::UNIT_SKIP:
             return pht('Unit Tests Skipped');
         case DifferentialUnitStatus::UNIT_AUTO_SKIP:
             return pht('Automatic diff as part of commit; unit tests not applicable.');
         case DifferentialUnitStatus::UNIT_POSTPONED:
             return pht('Unit Tests Postponed');
     }
     return '???';
 }
 public static function getDiffUnitMessage(DifferentialDiff $diff)
 {
     switch ($diff->getUnitStatus()) {
         case DifferentialUnitStatus::UNIT_NONE:
             return 'No Unit Test Coverage';
         case DifferentialUnitStatus::UNIT_OKAY:
             return 'Unit Tests OK';
         case DifferentialUnitStatus::UNIT_WARN:
             return 'Unit Test Warnings';
         case DifferentialUnitStatus::UNIT_FAIL:
             return 'Unit Test Errors';
         case DifferentialUnitStatus::UNIT_SKIP:
             return 'Unit Tests Skipped';
         case DifferentialUnitStatus::UNIT_POSTPONED:
             return 'Unit Tests Postponed';
     }
     return '???';
 }