blob: 9fb5909dfe2f7fecd642ce101bff41a5c004eedb [file] [log] [blame]
package org.testng.internal;
import org.testng.IAttributes;
import org.testng.IClass;
import org.testng.ITest;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.collections.Objects;
import java.util.List;
import java.util.Set;
/**
* This class represents the result of a test.
*
* @author Cedric Beust, May 2, 2004
*/
public class TestResult implements ITestResult {
private static final long serialVersionUID = 6273017418233324556L;
private IClass m_testClass = null;
private ITestNGMethod m_method = null;
private int m_status = -1;
private Throwable m_throwable = null;
private long m_startMillis = 0;
private long m_endMillis = 0;
private String m_name = null;
private String m_host;
transient private Object[] m_parameters = {};
transient private Object m_instance;
private String m_instanceName;
private ITestContext m_context;
public TestResult() {
}
public TestResult(IClass testClass,
Object instance,
ITestNGMethod method,
Throwable throwable,
long start,
long end,
ITestContext context)
{
init(testClass, instance, method, throwable, start, end, context);
}
/**
*
* @param testClass
* @param instance
* @param method
* @param throwable
* @param start
* @param end
*/
public void init (IClass testClass,
Object instance,
ITestNGMethod method,
Throwable throwable,
long start,
long end,
ITestContext context)
{
m_testClass = testClass;
m_throwable = throwable;
m_instanceName = m_testClass.getName();
if (null == m_throwable) {
m_status = ITestResult.SUCCESS;
}
m_startMillis = start;
m_endMillis = end;
m_method = method;
m_context = context;
m_instance = instance;
// Calculate the name: either the method name, ITest#getTestName or
// toString() if it's been overridden.
if (m_instance == null) {
m_name = m_method.getMethodName();
} else {
if (m_instance instanceof ITest) {
m_name = ((ITest) m_instance).getTestName();
}
else if (context.getName() != null) {
m_name = context.getName();
}
else {
String string = m_instance.toString();
// Only display toString() if it's been overridden by the user
m_name = getMethod().getMethodName();
try {
if (!Object.class.getMethod("toString")
.equals(m_instance.getClass().getMethod("toString"))) {
m_instanceName = string.startsWith("class ")
? string.substring("class ".length())
: string;
m_name = m_name + " on " + m_instanceName;
}
}
catch(NoSuchMethodException ignore) {
// ignore
}
}
}
}
private static void ppp(String s) {
System.out.println("[TestResult] " + s);
}
@Override
public void setEndMillis(long millis) {
m_endMillis = millis;
}
/**
* If this result's related instance implements ITest or use @Test(testName=...), returns its test name,
* otherwise returns null.
*/
@Override
public String getTestName() {
if (m_instance instanceof ITest) {
return ((ITest) m_instance).getTestName();
}
if (m_context.getName() != null) {
return m_context.getName();
}
return null;
}
@Override
public String getName() {
return m_name;
}
/**
* @return Returns the method.
*/
@Override
public ITestNGMethod getMethod() {
return m_method;
}
/**
* @param method The method to set.
*/
public void setMethod(ITestNGMethod method) {
m_method = method;
}
/**
* @return Returns the status.
*/
@Override
public int getStatus() {
return m_status;
}
/**
* @param status The status to set.
*/
@Override
public void setStatus(int status) {
m_status = status;
}
@Override
public boolean isSuccess() {
return ITestResult.SUCCESS == m_status;
}
/**
* @return Returns the testClass.
*/
@Override
public IClass getTestClass() {
return m_testClass;
}
/**
* @param testClass The testClass to set.
*/
public void setTestClass(IClass testClass) {
m_testClass = testClass;
}
/**
* @return Returns the throwable.
*/
@Override
public Throwable getThrowable() {
return m_throwable;
}
/**
* @param throwable The throwable to set.
*/
@Override
public void setThrowable(Throwable throwable) {
m_throwable = throwable;
}
/**
* @return Returns the endMillis.
*/
@Override
public long getEndMillis() {
return m_endMillis;
}
/**
* @return Returns the startMillis.
*/
@Override
public long getStartMillis() {
return m_startMillis;
}
// public List<String> getOutput() {
// return m_output;
// }
@Override
public String toString() {
List<String> output = Reporter.getOutput(this);
String result = Objects.toStringHelper(getClass())
.omitNulls()
.omitEmptyStrings()
.add("name", getName())
.add("status", toString(m_status))
.add("method", m_method)
.add("output", output != null && output.size() > 0 ? output.get(0) : null)
.toString();
return result;
}
private String toString(int status) {
switch(status) {
case SUCCESS: return "SUCCESS";
case FAILURE: return "FAILURE";
case SKIP: return "SKIP";
case SUCCESS_PERCENTAGE_FAILURE: return "SUCCESS WITHIN PERCENTAGE";
case STARTED: return "STARTED";
default: throw new RuntimeException();
}
}
@Override
public String getHost() {
return m_host;
}
public void setHost(String host) {
m_host = host;
}
@Override
public Object[] getParameters() {
return m_parameters;
}
@Override
public void setParameters(Object[] parameters) {
m_parameters = parameters;
}
@Override
public Object getInstance() {
return m_instance;
}
private IAttributes m_attributes = new Attributes();
@Override
public Object getAttribute(String name) {
return m_attributes.getAttribute(name);
}
@Override
public void setAttribute(String name, Object value) {
m_attributes.setAttribute(name, value);
}
@Override
public Set<String> getAttributeNames() {
return m_attributes.getAttributeNames();
}
@Override
public Object removeAttribute(String name) {
return m_attributes.removeAttribute(name);
}
@Override
public ITestContext getTestContext() {
return m_context;
}
public void setContext(ITestContext context) {
m_context = context;
}
@Override
public int compareTo(ITestResult comparison) {
if( getStartMillis() > comparison.getStartMillis() ) {
return 1;
} else if( getStartMillis() < comparison.getStartMillis()) {
return -1;
} else {
return 0;
}
}
@Override
public String getInstanceName() {
return m_instanceName;
}
}