package uk.co.acuminous.julez.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import uk.co.acuminous.julez.event.Event;
import uk.co.acuminous.julez.event.filter.EventDataFilter;
import uk.co.acuminous.julez.event.filter.EventFilter;
import uk.co.acuminous.julez.event.handler.InMemoryEventRepository;
public class TestEventRepository extends InMemoryEventRepository {
public void put(Event event) {
events.add(event);
}
public Event first() {
return iterator().next();
}
public Event get(int i) {
int sofar = 0;
for (Event event : events) {
if (sofar == i) return event;
++sofar;
}
return null;
}
public Event last() {
Event ret = null;
for (Event event : events) {
ret = event;
}
return ret;
}
public int count() {
return events.size();
}
public int count(String key, String pattern) {
return count(new EventDataFilter().filterEventsWhere(key).matches(pattern));
}
public int count(EventFilter filter) {
return list(filter).size();
}
public List<Event> list() {
return new ArrayList<Event>(events);
}
public List<Event> list(String key, String pattern) {
return list(new EventDataFilter().filterEventsWhere(key).matches(pattern));
}
public List<Event> list(EventFilter filter) {
List<Event> filteredEvents = new ArrayList<Event>();
for (Event event : events) {
if (filter.accept(event)) {
filteredEvents.add(event);
}
}
return filteredEvents;
}
public void assertEvents(Event...expectedEvents) {
if (expectedEvents.length != events.size()) {
throw new AssertionError(String.format("Actual number of events %d did not match expected number of events %d", events.size(), expectedEvents.length));
}
Iterator<Event> actualEvents = events.iterator();
for (Event expected : expectedEvents) {
Event actual = actualEvents.next();
if (!expected.equals(actual)) {
throw new AssertionError(String.format("Actual event %s does not match expected event %s", actual, expected));
}
}
}
}