package org.testory.plumbing.mock;
import static org.testory.plumbing.PlumbingException.check;
import static org.testory.plumbing.history.FilteredHistory.filter;
import java.util.ArrayList;
import java.util.List;
import org.testory.plumbing.Mocking;
import org.testory.plumbing.history.FilteredHistory;
import org.testory.plumbing.history.History;
public class UniqueNamer implements Namer {
private final FilteredHistory<Mocking> mockingHistory;
private UniqueNamer(FilteredHistory<Mocking> mockingHistory) {
this.mockingHistory = mockingHistory;
}
public static Namer uniqueNamer(History history) {
check(history != null);
return new UniqueNamer(filter(Mocking.class, history));
}
public String name(Class<?> type) {
check(type != null);
List<String> usedNames = usedNames();
for (int i = 0;; i++) {
String name = "mock" + type.getSimpleName() + i;
if (!usedNames.contains(name)) {
return name;
}
}
}
private List<String> usedNames() {
List<String> usedNames = new ArrayList<>();
for (Mocking mocking : mockingHistory.get()) {
usedNames.add(mocking.name);
}
return usedNames;
}
}