blob: bf1daa2dc7cb4f7bbe727acee658811f225db7b2 [file] [log] [blame]
package org.testng.reporters.jq;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.collections.ListMultiMap;
import org.testng.collections.Lists;
import org.testng.collections.Maps;
import org.testng.collections.SetMultiMap;
import org.testng.internal.Utils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Model {
private ListMultiMap<ISuite, ITestResult> m_model = Maps.newListMultiMap();
private List<ISuite> m_suites = null;
private Map<String, String> m_testTags = Maps.newHashMap();
private Map<ITestResult, String> m_testResultMap = Maps.newHashMap();
private Map<ISuite, ResultsByClass> m_failedResultsByClass = Maps.newHashMap();
private Map<ISuite, ResultsByClass> m_skippedResultsByClass = Maps.newHashMap();
private Map<ISuite, ResultsByClass> m_passedResultsByClass = Maps.newHashMap();
private List<ITestResult> m_allFailedResults = Lists.newArrayList();
// Each suite is mapped to failed.png, skipped.png or nothing (which means passed.png)
private Map<String, String> m_statusBySuiteName = Maps.newHashMap();
private SetMultiMap<String, String> m_groupsBySuiteName = Maps.newSetMultiMap();
private SetMultiMap<String, String> m_methodsByGroup = Maps.newSetMultiMap();
public Model(List<ISuite> suites) {
m_suites = suites;
init();
}
public List<ISuite> getSuites() {
return m_suites;
}
private void init() {
int testCounter = 0;
for (ISuite suite : m_suites) {
List<ITestResult> passed = Lists.newArrayList();
List<ITestResult> failed = Lists.newArrayList();
List<ITestResult> skipped = Lists.newArrayList();
for (ISuiteResult sr : suite.getResults().values()) {
ITestContext context = sr.getTestContext();
m_testTags.put(context.getName(), "test-" + testCounter++);
failed.addAll(context.getFailedTests().getAllResults());
skipped.addAll(context.getSkippedTests().getAllResults());
passed.addAll(context.getPassedTests().getAllResults());
IResultMap[] map = new IResultMap[] {
context.getFailedTests(),
context.getSkippedTests(),
context.getPassedTests()
};
for (IResultMap m : map) {
for (ITestResult tr : m.getAllResults()) {
m_testResultMap.put(tr, getTestResultName(tr));
}
}
}
// Process them in the order passed, skipped and failed, so that the failed
// icon overrides all the others and the skipped icon overrides passed.
// Passed
{
ResultsByClass rbc = new ResultsByClass();
for (ITestResult tr : passed) {
rbc.addResult(tr.getTestClass().getRealClass(), tr);
updateGroups(suite, tr);
}
m_passedResultsByClass.put(suite, rbc);
}
// Skipped
{
ResultsByClass rbc = new ResultsByClass();
for (ITestResult tr : skipped) {
m_statusBySuiteName.put(suite.getName(), "skipped");
rbc.addResult(tr.getTestClass().getRealClass(), tr);
updateGroups(suite, tr);
}
m_skippedResultsByClass.put(suite, rbc);
}
// Failed
{
ResultsByClass rbc = new ResultsByClass();
for (ITestResult tr : failed) {
m_statusBySuiteName.put(suite.getName(), "failed");
rbc.addResult(tr.getTestClass().getRealClass(), tr);
m_allFailedResults.add(tr);
updateGroups(suite, tr);
}
m_failedResultsByClass.put(suite, rbc);
}
m_model.putAll(suite, failed);
m_model.putAll(suite, skipped);
m_model.putAll(suite, passed);
}
}
private void updateGroups(ISuite suite, ITestResult tr) {
String[] groups = tr.getMethod().getGroups();
m_groupsBySuiteName.putAll(suite.getName(),
Arrays.asList(groups));
for (String group : groups) {
m_methodsByGroup.put(group, tr.getMethod().getMethodName());
}
}
public ResultsByClass getFailedResultsByClass(ISuite suite) {
return m_failedResultsByClass.get(suite);
}
public ResultsByClass getSkippedResultsByClass(ISuite suite) {
return m_skippedResultsByClass.get(suite);
}
public ResultsByClass getPassedResultsByClass(ISuite suite) {
return m_passedResultsByClass.get(suite);
}
public String getTag(ITestResult tr) {
return m_testResultMap.get(tr);
}
public List<ITestResult> getTestResults(ISuite suite) {
return nonnullList(m_model.get(suite));
}
public static String getTestResultName(ITestResult tr) {
StringBuilder result = new StringBuilder(tr.getMethod().getMethodName());
Object[] parameters = tr.getParameters();
if (parameters.length > 0) {
result.append("(");
StringBuilder p = new StringBuilder();
for (int i = 0; i < parameters.length; i++) {
if (i > 0) p.append(", ");
p.append(Utils.toString(parameters[i]));
}
if (p.length() > 100) {
String s = p.toString().substring(0, 100);
s = s + "...";
result.append(s);
} else {
result.append(p.toString());
}
result.append(")");
}
return result.toString();
}
public List<ITestResult> getAllFailedResults() {
return m_allFailedResults;
}
public static String getImage(String tagClass) {
return tagClass + ".png";
}
public String getStatusForSuite(String suiteName) {
String result = m_statusBySuiteName.get(suiteName);
return result != null ? result : "passed";
}
public <T> Set<T> nonnullSet(Set<T> l) {
return l != null ? l : Collections.<T>emptySet();
}
public <T> List<T> nonnullList(List<T> l) {
return l != null ? l : Collections.<T>emptyList();
}
public List<String> getGroups(String name) {
List<String> result = Lists.newArrayList(nonnullSet(m_groupsBySuiteName.get(name)));
Collections.sort(result);
return result;
}
public List<String> getMethodsInGroup(String groupName) {
List<String> result = Lists.newArrayList(nonnullSet(m_methodsByGroup.get(groupName)));
Collections.sort(result);
return result;
}
public List<ITestResult> getAllTestResults(ISuite suite) {
return getAllTestResults(suite, true /* tests only */);
}
public List<ITestResult> getAllTestResults(ISuite suite, boolean testsOnly) {
List<ITestResult> result = Lists.newArrayList();
for (ISuiteResult sr : suite.getResults().values()) {
result.addAll(sr.getTestContext().getPassedTests().getAllResults());
result.addAll(sr.getTestContext().getFailedTests().getAllResults());
result.addAll(sr.getTestContext().getSkippedTests().getAllResults());
if (! testsOnly) {
result.addAll(sr.getTestContext().getPassedConfigurations().getAllResults());
result.addAll(sr.getTestContext().getFailedConfigurations().getAllResults());
result.addAll(sr.getTestContext().getSkippedConfigurations().getAllResults());
}
}
return result;
}
}