001 /*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2014 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube 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 * SonarQube 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 License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
019 */
020 package org.sonar.api.batch.sensor.test;
021
022 import org.sonar.api.batch.fs.InputFile;
023 import org.sonar.api.batch.measure.Metric;
024 import org.sonar.api.measures.CoreMetrics;
025
026 /**
027 * @since 5.0
028 */
029 public interface Coverage {
030
031 public enum CoverageType {
032 UNIT(CoreMetrics.LINES_TO_COVER, CoreMetrics.UNCOVERED_LINES, CoreMetrics.COVERAGE_LINE_HITS_DATA, CoreMetrics.CONDITIONS_TO_COVER, CoreMetrics.UNCOVERED_CONDITIONS,
033 CoreMetrics.CONDITIONS_BY_LINE, CoreMetrics.COVERED_CONDITIONS_BY_LINE),
034 INTEGRATION(CoreMetrics.IT_LINES_TO_COVER, CoreMetrics.IT_UNCOVERED_LINES, CoreMetrics.IT_COVERAGE_LINE_HITS_DATA, CoreMetrics.IT_CONDITIONS_TO_COVER,
035 CoreMetrics.IT_UNCOVERED_CONDITIONS, CoreMetrics.IT_CONDITIONS_BY_LINE, CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE),
036 OVERALL(CoreMetrics.OVERALL_LINES_TO_COVER, CoreMetrics.OVERALL_UNCOVERED_LINES, CoreMetrics.OVERALL_COVERAGE_LINE_HITS_DATA, CoreMetrics.OVERALL_CONDITIONS_TO_COVER,
037 CoreMetrics.OVERALL_UNCOVERED_CONDITIONS, CoreMetrics.OVERALL_CONDITIONS_BY_LINE, CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE);
038
039 private Metric<Integer> linesToCover;
040 private Metric<Integer> uncoveredLines;
041 private Metric<String> lineHitsData;
042 private Metric<Integer> conditionsToCover;
043 private Metric<Integer> uncoveredConditions;
044 private Metric<String> conditionsByLine;
045 private Metric<String> coveredConditionsByLine;
046
047 private CoverageType(Metric<Integer> linesToCover, Metric<Integer> uncoveredLines, Metric<String> lineHitsData, Metric<Integer> conditionsToCover,
048 Metric<Integer> uncoveredConditions, Metric<String> conditionsByLine, Metric<String> coveredConditionsByLine) {
049 this.linesToCover = linesToCover;
050 this.uncoveredLines = uncoveredLines;
051 this.lineHitsData = lineHitsData;
052 this.conditionsToCover = conditionsToCover;
053 this.uncoveredConditions = uncoveredConditions;
054 this.conditionsByLine = conditionsByLine;
055 this.coveredConditionsByLine = coveredConditionsByLine;
056 }
057
058 public Metric<Integer> linesToCover() {
059 return linesToCover;
060 }
061
062 public Metric<Integer> uncoveredLines() {
063 return uncoveredLines;
064 }
065
066 public Metric<String> lineHitsData() {
067 return lineHitsData;
068 }
069
070 public Metric<Integer> conditionsToCover() {
071 return conditionsToCover;
072 }
073
074 public Metric<Integer> uncoveredConditions() {
075 return uncoveredConditions;
076 }
077
078 public Metric<String> conditionsByLine() {
079 return conditionsByLine;
080 }
081
082 public Metric<String> coveredConditionsByLine() {
083 return coveredConditionsByLine;
084 }
085 }
086
087 /**
088 * The file you are storing coverage on.
089 */
090 Coverage onFile(InputFile inputFile);
091
092 Coverage ofType(CoverageType type);
093
094 Coverage lineHits(int line, int hits);
095
096 Coverage conditions(int line, int conditions, int coveredConditions);
097
098 /**
099 * Call this method only once when your are done with defining the test case coverage.
100 */
101 void save();
102
103 }