001/*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019 */
020package org.sonar.plugins.surefire.data;
021
022import com.google.common.collect.Lists;
023
024import java.util.Collections;
025import java.util.List;
026
027public final class UnitTestClassReport {
028  private long errors = 0L, failures = 0L, skipped = 0L, tests = 0L, durationMilliseconds = 0L;
029  private List<UnitTestResult> results = null;
030
031  public UnitTestClassReport add(UnitTestClassReport other) {
032    for (UnitTestResult otherResult : other.getResults()) {
033      add(otherResult);
034    }
035    return this;
036  }
037
038  public UnitTestClassReport add(UnitTestResult result) {
039    initResults();
040    results.add(result);
041    if (result.getStatus().equals(UnitTestResult.STATUS_SKIPPED)) {
042      skipped += 1;
043
044    } else if (result.getStatus().equals(UnitTestResult.STATUS_FAILURE)) {
045      failures += 1;
046
047    } else if (result.getStatus().equals(UnitTestResult.STATUS_ERROR)) {
048      errors += 1;
049    }
050    tests += 1;
051    durationMilliseconds += result.getDurationMilliseconds();
052    return this;
053  }
054
055  private void initResults() {
056    if (results == null) {
057      results = Lists.newArrayList();
058    }
059  }
060
061  public long getErrors() {
062    return errors;
063  }
064
065  public long getFailures() {
066    return failures;
067  }
068
069  public long getSkipped() {
070    return skipped;
071  }
072
073  public long getTests() {
074    return tests;
075  }
076
077  public long getDurationMilliseconds() {
078    return durationMilliseconds;
079  }
080
081  public List<UnitTestResult> getResults() {
082    if (results==null) {
083      return Collections.emptyList();
084    }
085    return results;
086  }
087
088  public String toXml() {
089    StringBuilder sb = new StringBuilder(256);
090    sb.append("<tests-details>");
091    for (UnitTestResult result : results) {
092      result.appendXml(sb);
093    }
094    sb.append("</tests-details>");
095    return sb.toString();
096  }
097}