blob: 17ceaa218c955b5d9cf312497484f4c9372bec25 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.framework;
import java.io.*;
import java.math.*;
import java.util.*;
import org.eclipse.persistence.indirection.*;
/**
* <p><b>Purpose</b>:Results summary handles results associated with the execution of test suite and
* test model.
*/
public class TestResultsSummary implements ResultInterface, Comparable, Serializable {
protected BigDecimal id;
protected ValueHolderInterface parent;
protected String name;
protected String description;
protected ValueHolderInterface results;
protected ValueHolderInterface loadBuildSummary;
protected Throwable setupException;
protected int passed;
protected int warnings;
protected int errors;
protected int problems;
protected int fatalErrors;
protected int setupFailures;
protected int setupWarnings;
protected int totalTests;
protected transient TestCollection testCollection;
protected long totalTime;
public TestResultsSummary() {
this.name = "";
this.description = "";
this.parent = new ValueHolder();
this.loadBuildSummary = new ValueHolder();
this.results = new ValueHolder(new Vector());
this.passed = 0;
this.warnings = 0;
this.errors = 0;
this.fatalErrors = 0;
this.setupFailures = 0;
this.setupWarnings = 0;
this.totalTests = 0;
}
public TestResultsSummary(TestCollection testCollection) {
this.testCollection = testCollection;
this.name = testCollection.getName();
this.description = testCollection.getDescription();
this.parent = new ValueHolder();
this.loadBuildSummary = new ValueHolder();
this.results = new ValueHolder(new Vector());
this.passed = 0;
this.warnings = 0;
this.errors = 0;
this.fatalErrors = 0;
this.totalTests = 0;
}
public long getTotalTime() {
return totalTime;
}
public void setTotalTime(long totalTime) {
this.totalTime = totalTime;
}
@Override
public int compareTo(Object summary) {
return getName().compareTo(((TestResultsSummary)summary).getName());
}
/**
* A new test result is added to the summary which means incrementing the attributes in
* the summary.
*/
public void appendTestCaseResult(TestCase testCase) {
String testOutcome = testCase.getTestResult().getOutcome();
incrementTotalTests();
if (testOutcome.equals("Passed")) {
incrementPassed();
} else if (testOutcome.equals("Warning")) {
incrementWarnings();
} else if (testOutcome.equals("FatalError")) {
incrementFatalErrors();
} else if (testOutcome.equals("Error")) {
incrementErrors();
} else if (testOutcome.equals("Problem")) {
incrementProblems();
} else if (testOutcome.equals("You decide")) {
;
} else {
throw new Error("Wrong test result");
}
getResults().addElement(testCase.getTestResult());
testCase.getTestResult().setSummary(this);
LoadBuildSystem.loadBuild.addSummary(this);
}
/**
* Add two test summaries
*/
public void appendTestCollectionResult(TestCollection testCollection) {
TestResultsSummary testSummary = testCollection.getSummary();
setErrors(getErrors() + testSummary.getErrors());
setPassed(getPassed() + testSummary.getPassed());
setWarnings(getWarnings() + testSummary.getWarnings());
setProblems(getProblems() + testSummary.getProblems());
setFatalErrors(getFatalErrors() + testSummary.getFatalErrors());
setTotalTests(getTotalTests() + testSummary.getTotalTests());
setSetupFailures(getSetupFailures() + testSummary.getSetupFailures());
setSetupWarnings(getSetupWarnings() + testSummary.getSetupWarnings());
if (testSummary.didSetupFail()) {
setSetupFailures(getSetupFailures() + 1);
} else if (testSummary.didSetupWarn()) {
setSetupWarnings(getSetupWarnings() + 1);
}
testCollection.getSummary().setParent(this);
LoadBuildSystem.loadBuild.addSummary(this);
}
/**
* Add the Junit test results.
*/
public void appendTestResult(junit.framework.TestResult result) {
setErrors(getErrors() + result.failureCount());
setPassed(getPassed() + result.runCount() - result.failureCount() - result.errorCount());
setFatalErrors(getFatalErrors() + result.errorCount());
setTotalTests(getTotalTests() + result.runCount());
LoadBuildSystem.loadBuild.addSummary(this);
}
public boolean didSetupFail() {
return getSetupException() != null && !didSetupWarn();
}
public boolean didSetupWarn() {
return getSetupException() != null && (getSetupException() instanceof TestWarningException);
}
public String getDescription() {
return description;
}
/**
* Return the no. of errors in the test suite/model.
*/
public int getErrors() {
return errors;
}
/**
* Return the no. of fatal errors in the test suite/model.
*/
public int getFatalErrors() {
return fatalErrors;
}
public void setSetupFailures(int setupFailures) {
this.setupFailures = setupFailures;
}
public int getSetupFailures() {
return setupFailures;
}
public void setSetupWarnings(int setupWarnings) {
this.setupWarnings = setupWarnings;
}
public int getSetupWarnings() {
return setupWarnings;
}
public BigDecimal getId() {
return id;
}
public LoadBuildSummary getLoadBuildSummary() {
return (LoadBuildSummary)loadBuildSummary.getValue();
}
public ValueHolderInterface getLoadBuildSummaryHolder() {
return loadBuildSummary;
}
public String getName() {
return name;
}
public TestResultsSummary getParent() {
return (TestResultsSummary)parent.getValue();
}
public ValueHolderInterface getParentHolder() {
return parent;
}
/**
* Return the no. test which passed in the test suite/model.
*/
public int getPassed() {
return passed;
}
/**
* Return the number of problems in the test suite/model.
*/
public int getProblems() {
return problems;
}
/**
* Return the no. test which passed in the test suite/model.
*/
public Vector getResults() {
return (Vector)results.getValue();
}
/**
* Return the no. test which passed in the test suite/model.
*/
public ValueHolderInterface getResultsHolder() {
return results;
}
public Throwable getSetupException() {
return setupException;
}
public String getSetupExceptionStackTrace() {
if (setupException != null) {
StringWriter writer = new StringWriter();
setupException.printStackTrace(new PrintWriter(writer));
return writer.toString();
}
return null;
}
/**
* INTERNAL:
* This class knows about its associated test collection.
*/
public TestCollection getTestCollection() {
return testCollection;
}
/**
* Return the no. tests in the test suite/model.
*/
public int getTotalTests() {
return totalTests;
}
/**
* Return the no. warnings in the test suite/model.
*/
public int getWarnings() {
return warnings;
}
@Override
public boolean shouldLogResult() {
return !hasPassed();
}
/**
* Passed means the test was ok.
*/
@Override
public boolean hasPassed() {
// This is a safest way to check then doing totaltests == passedtests.
if ((getWarnings() != 0) || (getFatalErrors() != 0) || (getProblems() != 0) || (getErrors() != 0) || didSetupFail() || (getSetupFailures() != 0) || didSetupWarn() || (getSetupWarnings() != 0)) {
return false;
}
return true;
}
protected void incrementErrors() {
setErrors(getErrors() + 1);
}
protected void incrementFatalErrors() {
setFatalErrors(getFatalErrors() + 1);
}
protected void incrementPassed() {
setPassed(getPassed() + 1);
}
protected void incrementProblems() {
setProblems(getProblems() + 1);
}
protected void incrementTotalTests() {
setTotalTests(getTotalTests() + 1);
}
protected void incrementWarnings() {
setWarnings(getWarnings() + 1);
}
/**
* Print itself on the print stream.
*/
@Override
public void logResult(Writer log) {
// The indentationString adds some number of tabs to the print stream.
String indentationString = getTestCollection().getIndentationString();
try {
if (didSetupFail()) {
log.write(indentationString + org.eclipse.persistence.internal.helper.Helper.cr() + "## SETUP FAILURE: " + org.eclipse.persistence.internal.helper.Helper.cr() + getSetupException() + org.eclipse.persistence.internal.helper.Helper.cr());
PrintWriter printWriter = new PrintWriter(log);
getSetupException().printStackTrace(printWriter);
log.flush();
} else if (didSetupWarn()) {
log.write(indentationString + "SETUP WARNING: " + org.eclipse.persistence.internal.helper.Helper.cr());
((TestWarningException)getSetupException()).setIndentationString(indentationString);
log.write(getSetupException() + org.eclipse.persistence.internal.helper.Helper.cr());
log.flush();
} else {
if ((getErrors() > 0) || (getFatalErrors() > 0) || (getProblems() > 0)) {
log.write(indentationString + "###ERRORS###" + org.eclipse.persistence.internal.helper.Helper.cr());
}
log.write(indentationString + "Warnings: " + getWarnings() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Problems: " + getProblems() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Errors: " + getErrors() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Fatal Errors: " + getFatalErrors() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Passed: " + getPassed() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Setup Warnings: " + getSetupWarnings() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Setup Failures: " + getSetupFailures() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Total Time: " + getTotalTime() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Total Tests: " + getTotalTests() + org.eclipse.persistence.internal.helper.Helper.cr() + org.eclipse.persistence.internal.helper.Helper.cr());
log.flush();
}
} catch (IOException exception) {
}
}
/**
* Print itself on the print stream for the diff trace of the SRG.
*/
public void logRegressionResult(Writer log) {
// The indentationString adds some number of tabs to the print stream.
// Eliminate the numbers of PASSED, WARNING and TOTAL TESTS in SRG and LRG log. ET
String indentationString = getTestCollection().getIndentationString();
try {
if (didSetupFail()) {
log.write(indentationString + org.eclipse.persistence.internal.helper.Helper.cr() + "## SETUP FAILURE: " + org.eclipse.persistence.internal.helper.Helper.cr() + getSetupException() + org.eclipse.persistence.internal.helper.Helper.cr());
PrintWriter printWriter = new PrintWriter(log);
getSetupException().printStackTrace(printWriter);
log.flush();
} else {
if ((getErrors() > 0) || (getFatalErrors() > 0) || (getProblems() > 0)) {
log.write(indentationString + "###ERRORS###" + org.eclipse.persistence.internal.helper.Helper.cr());
}
//log.write(indentationString + "Warnings: " + getWarnings() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Problems: " + getProblems() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Errors: " + getErrors() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Fatal Errors: " + getFatalErrors() + org.eclipse.persistence.internal.helper.Helper.cr());
//log.write(indentationString + "Passed: " + getPassed() + org.eclipse.persistence.internal.helper.Helper.cr());
log.write(indentationString + "Setup Failures: " + getSetupFailures() + org.eclipse.persistence.internal.helper.Helper.cr() + org.eclipse.persistence.internal.helper.Helper.cr());
//log.write(
// indentationString + "Total Tests: " + getTotalTests() + org.eclipse.persistence.internal.helper.Helper.cr()
// + org.eclipse.persistence.internal.helper.Helper.cr());
log.flush();
}
} catch (IOException exception) {
}
}
/**
* Reset the totals.
*/
public void resetTotals() {
setResults(new Vector());
setPassed(0);
setWarnings(0);
setErrors(0);
setFatalErrors(0);
setSetupFailures(0);
setSetupWarnings(0);
setTotalTests(0);
}
public void setDescription(String aDescription) {
description = aDescription;
}
public void setErrors(int anError) {
errors = anError;
}
public void setFatalErrors(int theFatalError) {
fatalErrors = theFatalError;
}
public void setId(BigDecimal anId) {
id = anId;
}
public void setLoadBuildSummary(LoadBuildSummary summary) {
loadBuildSummary.setValue(summary);
}
public void setLoadBuildSummaryHolder(ValueHolderInterface holder) {
loadBuildSummary = holder;
}
public void setName(String aName) {
name = aName;
}
public void setParent(TestResultsSummary result) {
parent.setValue(result);
}
public void setParentHolder(ValueHolderInterface holder) {
parent = holder;
}
public void setPassed(int thePassed) {
passed = thePassed;
}
public void setProblems(int theProblem) {
problems = theProblem;
}
public void setResults(Vector theResults) {
results.setValue(theResults);
}
public void setResultsHolder(ValueHolderInterface holder) {
results = holder;
}
public void setSetupException(Throwable setupException) {
this.setupException = setupException;
}
public void setSetupExceptionStackTrace(String stackTrace) {
if (stackTrace != null) {
if (setupException != null) {
setupException = new Exception(stackTrace);
}
}
}
/**
* This class knows about its associated test collection.
*/
public void setTestCollection(TestCollection testCollection) {
this.testCollection = testCollection;
}
public void settName(String aName) {
name = aName;
}
public void setTotalTests(int tests) {
totalTests = tests;
}
public void setWarnings(int theWarnings) {
warnings = theWarnings;
}
}