package hudson.plugins.PerfPublisher;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import hudson.plugins.PerfPublisher.Report.FileContainer;
import hudson.plugins.PerfPublisher.Report.Report;
import hudson.plugins.PerfPublisher.Report.ReportContainer;
import hudson.plugins.PerfPublisher.Report.ResultContainer;
import hudson.plugins.PerfPublisher.Report.Test;
/**
* Class representation of trend between two reports
*
* @author Lapeluche
*
*/
public class TrendReport {
private ReportContainer actualResult;
private ReportContainer oldResult;
public TrendReport(ReportContainer actualReport, ReportContainer oldReport) {
this.actualResult = actualReport;
this.oldResult = oldReport;
}
/**
* Round a double with n decimals
*
* @param a
* value to convert
* @param n
* Number of decimals
* @return the rounded number
*/
public static double floor(double a, int n) {
double p = Math.pow(10.0, n);
return Math.floor((a * p) + 0.5) / p;
}
/**
* @return the actual report
*/
public ReportContainer getActualReportContainer() {
return actualResult;
}
/**
* @param actualReport
* the actual report
*/
public void setActualReportContainer(ReportContainer actualReportContainer) {
this.actualResult = actualReportContainer;
}
/**
* @return the old report
*/
public ReportContainer getOldReport() {
return oldResult;
}
/**
* @param oldReport
* the old report
*/
public void setOldReport(ReportContainer oldReportContainer) {
this.oldResult = oldReportContainer;
}
/**
* @return true if the number of test has increased
*/
public boolean isNumberOfTestHasIncrease() {
return (actualResult.getNumberOfTest() > oldResult.getNumberOfTest());
}
/**
* @return true if the number of test has decrease
*/
public boolean isNumberOfTestHasDecrease() {
return (actualResult.getNumberOfTest() < oldResult.getNumberOfTest());
}
/**
* @return true if the number of test is stable
*/
public boolean isNumberOfTestStable() {
return (actualResult.getNumberOfTest() == oldResult.getNumberOfTest());
}
/**
* @return true if the percent of passed test has increase
*/
public boolean isPercentOfPassedTestHasIncrease() {
return (actualResult.getPercentOfPassedTest() > oldResult
.getPercentOfPassedTest());
}
/**
* @return true if the percent of passed test has decrease
*/
public boolean isPercentOfPassedTestHasDecrease() {
return (actualResult.getPercentOfPassedTest() < oldResult
.getPercentOfPassedTest());
}
/**
* @return true if the percent of passed test is stable
*/
public boolean isPercentOfPassedTestStable() {
return (actualResult.getPercentOfPassedTest() == oldResult
.getPercentOfPassedTest());
}
/**
* @return true if the number of executed test has increased
*/
public boolean isNumberOfExecutedTestHasIncreased() {
return (actualResult.getNumberOfExecutedTest() > oldResult
.getNumberOfExecutedTest());
}
/**
* @return true if the number of executed test has decrease
*/
public boolean isNumberOfExecutedTestHasDecrease() {
return (actualResult.getNumberOfExecutedTest() < oldResult
.getNumberOfExecutedTest());
}
/**
* @return true if the number of executed test is stable
*/
public boolean isNumberOfExecutedTestStable() {
return (actualResult.getNumberOfExecutedTest() == oldResult
.getNumberOfExecutedTest());
}
/**
* @return true if the percent of executed test has increased
*/
public boolean isPercentOfExecutedTestHasIncreased() {
return (actualResult.getPercentOfExecutedTest() > oldResult
.getPercentOfExecutedTest());
}
/**
* @return true if the number of not executed test has increased
*/
public boolean isNumberOfNotExecutedTestHasIncreased() {
return (actualResult.getNumberOfNotExecutedTest() > oldResult
.getNumberOfNotExecutedTest());
}
/**
* @return true if the number of not executed test has decrease
*/
public boolean isNumberOfNotExecutedTestHasDecrease() {
return (actualResult.getNumberOfNotExecutedTest() < oldResult
.getNumberOfNotExecutedTest());
}
/**
* @return true if the number of not executed test is stable
*/
public boolean isNumberOfNotExecutedTestStable() {
return (actualResult.getNumberOfNotExecutedTest() == oldResult
.getNumberOfNotExecutedTest());
}
/**
* @return true if the percent of not executed test has increased
*/
public boolean isPercentOfNotExecutedTestHasIncreased() {
return (actualResult.getPercentOfNotExecutedTest() > oldResult
.getPercentOfNotExecutedTest());
}
/**
* @return true if the percent of passed test has increase
*/
public boolean isPercentOfFailedTestHasIncrease() {
return (actualResult.getPercentOfFailedTest() > oldResult
.getPercentOfFailedTest());
}
/**
* @return true if the percent of passed test has decrease
*/
public boolean isPercentOfFailedTestHasDecrease() {
return (actualResult.getPercentOfFailedTest() < oldResult
.getPercentOfFailedTest());
}
/**
* @return true if the percent of passed test is stable
*/
public boolean isPercentOfFailedTestStable() {
return (actualResult.getPercentOfFailedTest() == oldResult
.getPercentOfFailedTest());
}
/**
* @return true if the average compile time has increase
*/
public boolean isAverageOfCompileTimeHasIncrease() {
return (actualResult.getAverageOfCompileTime() > oldResult
.getAverageOfCompileTime());
}
/**
* @return true if the average compile time has decrease
*/
public boolean isAverageOfCompileTimeHasDecrease() {
return (actualResult.getAverageOfCompileTime() < oldResult
.getAverageOfCompileTime());
}
/**
* @return true if the average compile time is stable
*/
public boolean isAverageOfCompileTimeStable() {
return (actualResult.getAverageOfCompileTime() == oldResult
.getAverageOfCompileTime());
}
/**
* @return true if the average execution time has increase
*/
public boolean isAverageOfExecutionTimeHasIncrease() {
return (actualResult.getAverageOfExecutionTime() > oldResult
.getAverageOfExecutionTime());
}
/**
* @return true if the average execution time has decrease
*/
public boolean isAverageOfExecutionTimeHasDecrease() {
return (actualResult.getAverageOfExecutionTime() < oldResult
.getAverageOfExecutionTime());
}
/**
* @return true if the average execution time is stable
*/
public boolean isAverageOfExecutionTimeStable() {
return (actualResult.getAverageOfExecutionTime() == oldResult
.getAverageOfExecutionTime());
}
/**
* @return true if the average performance has increase
*/
public boolean isAverageOfPerformanceHasIncrease() {
return (actualResult.getAverageOfPerformance() > oldResult
.getAverageOfPerformance());
}
/**
* @return true if the average performance has decrease
*/
public boolean isAverageOfPerformanceHasDecrease() {
return (actualResult.getAverageOfPerformance() < oldResult
.getAverageOfPerformance());
}
/**
* @return true if the average performance is stable
*/
public boolean isAverageOfPerformanceStable() {
return (actualResult.getAverageOfPerformance() == oldResult
.getAverageOfPerformance());
}
public ArrayList<Test> getNewTests() {
ArrayList<Test> result = new ArrayList<Test>();
for (int i = 0; i < actualResult.getTests().size(); i++) {
if (oldResult.getTestWithName(actualResult.getTests().get(i)
.getName()) == null) {
result.add(actualResult.getTests().get(i));
}
}
return result;
}
public int getNumberOfNewTests() {
return getNewTests().size();
}
public double getPercentOfNewTests() {
double resultat = 0;
resultat = (double) getNumberOfNewTests()
/ (double) actualResult.getNumberOfTest() * 100.0;
return floor(resultat, 2);
}
public int getNumberOfDeletedTests() {
return getDeletedTests().size();
}
public ArrayList<Test> getDeletedTests() {
ArrayList<Test> result = new ArrayList<Test>();
for (int i = 0; i < oldResult.getTests().size(); i++) {
if (actualResult.getTestWithName(oldResult.getTests().get(i)
.getName()) == null) {
result.add(oldResult.getTests().get(i));
}
}
return result;
}
public double getPercentOfDeletedTests() {
double resultat = 0;
resultat = (double) getNumberOfDeletedTests()
/ (double) actualResult.getNumberOfTest() * 100.0;
return floor(resultat, 2);
}
public List<Test> getExecutionStatusChangedTests() {
List<Test> result = new ArrayList<Test>();
for (int i = 0; i < actualResult.getTests().size(); i++) {
Test currentTest = actualResult.getTests().get(i);
Test oldTest = oldResult.getTestWithName(currentTest.getName());
if (oldTest != null) {
if (oldTest.isExecuted() != currentTest.isExecuted()) {
result.add(currentTest);
}
}
}
return result;
}
public int getNumberOfExecutionStatusChangedTests() {
return this.getExecutionStatusChangedTests().size();
}
public double getPercentOfExecutionStatusChangedTests() {
double resultat = 0;
resultat = (double) getNumberOfExecutionStatusChangedTests()
/ (double) actualResult.getNumberOfTest() * 100.0;
return floor(resultat, 2);
}
public List<Test> getSuccessStatusChangedTests() {
List<Test> result = new ArrayList<Test>();
for (int i = 0; i < actualResult.getTests().size(); i++) {
Test currentTest = actualResult.getTests().get(i);
Test oldTest = oldResult.getTestWithName(currentTest.getName());
if (oldTest != null) {
if (oldTest.isSuccessfull() != currentTest.isSuccessfull()) {
result.add(currentTest);
}
}
}
return result;
}
public int getNumberOfSuccessStatusChangedTests() {
return this.getSuccessStatusChangedTests().size();
}
public double getPercentOfSuccessStatusChangedTests() {
double resultat = 0;
resultat = (double) getNumberOfSuccessStatusChangedTests()
/ (double) actualResult.getNumberOfTest() * 100.0;
return floor(resultat, 2);
}
public boolean containsMetrics(String metricName) {
Map<String,String> old_metrics = this.oldResult.getMetricsName();
if (null == old_metrics) {
return false;
}
return (this.oldResult.getAverageValuePerMetrics().get(metricName)!=null);
}
public boolean isAverageOfMetricValueHasIncreased(String metricName) {
if (!containsMetrics(metricName)) {
return false;
}
return (this.actualResult.getAverageValuePerMetrics().get(metricName) > this.oldResult.getAverageValuePerMetrics().get(metricName));
}
public boolean isAverageOfMetricValueHasDecreased(String metricName) {
if (!containsMetrics(metricName)) {
return false;
}
return (this.actualResult.getAverageValuePerMetrics().get(metricName) < this.oldResult.getAverageValuePerMetrics().get(metricName));
}
}