package org.testng;
import org.testng.collections.Maps;
import org.testng.internal.XmlMethodSelector;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
public class ClassMethodMap {
private final Map<Object, Collection<ITestNGMethod>> classMap = Maps.newConcurrentMap();
private final Map<ITestClass, Set<Object>> beforeClassMethods = Maps.newConcurrentMap();
private final Map<ITestClass, Set<Object>> afterClassMethods = Maps.newConcurrentMap();
public ClassMethodMap(List<ITestNGMethod> methods, XmlMethodSelector xmlMethodSelector) {
for (ITestNGMethod m : methods) {
if (xmlMethodSelector != null && !xmlMethodSelector.includeMethod(null, m, true)) {
continue;
}
Object instance = m.getInstance();
Collection<ITestNGMethod> l = classMap.get(instance);
if (l == null) {
l = new ConcurrentLinkedQueue<>();
classMap.put(instance, l);
}
l.add(m);
}
}
public boolean removeAndCheckIfLast(ITestNGMethod m, Object instance) {
Collection<ITestNGMethod> l = classMap.get(instance);
if (l == null) {
throw new AssertionError("l should not be null");
}
l.remove(m);
for (ITestNGMethod tm : l) {
if (tm.getEnabled() && tm.getTestClass().equals(m.getTestClass())) {
return false;
}
}
return true;
}
public Map<ITestClass, Set<Object>> getInvokedBeforeClassMethods() {
return beforeClassMethods;
}
public Map<ITestClass, Set<Object>> getInvokedAfterClassMethods() {
return afterClassMethods;
}
public void clear() {
for (Set<Object> instances : beforeClassMethods.values()) {
instances.clear();
}
for (Set<Object> instances : afterClassMethods.values()) {
instances.clear();
}
beforeClassMethods.clear();
afterClassMethods.clear();
}
}