X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fgeneral%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Ftest%2FEventTracker.java;h=94d2f19fa60efadd2889200208a7ab86a5f75d7b;hb=ddd261f331280640c5b53c7128230b629ebcd268;hp=9e9c472ddfe65d0e87cc0db45365328d71c3a961;hpb=92e23e5ecf9614f2ab770a8cdedc0b21ddf1e127;p=utils diff --git a/support/general/src/test/java/org/wamblee/test/EventTracker.java b/support/general/src/test/java/org/wamblee/test/EventTracker.java index 9e9c472d..94d2f19f 100644 --- a/support/general/src/test/java/org/wamblee/test/EventTracker.java +++ b/support/general/src/test/java/org/wamblee/test/EventTracker.java @@ -1,12 +1,12 @@ /* * Copyright 2006 the original author or authors. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,24 +15,25 @@ */ package org.wamblee.test; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * Tracks the occurence of certain events in a test environment. Threads in a * test environment tell the event tracker of the occurrence of certain events * using {@link #eventOccurred(Event)}. Test code inspects the events sent by a * thread using {@link #isEventSent(Thread, Event)}. - * + * * A record is kept of every event which is sent. Therefore, the occurrence of a * new event does not erase a previously sent event. - * + * * @param * Type of event sent from test code. Usually String will be * sufficient. The event type must provide a sensible implementation @@ -41,7 +42,6 @@ import org.apache.commons.logging.LogFactory; * @author Erik Brakkee */ public class EventTracker { - private static final Log LOG = LogFactory.getLog(EventTracker.class); /** @@ -51,36 +51,39 @@ public class EventTracker { /** * Constructs the event tracker. - * + * */ public EventTracker() { clear(); } - public void clear() { - events = new HashMap>(); - } + public void clear() { + events = new HashMap>(); + } /** * Called by a thread to inform that an event has occurred. - * + * * @param aEvent * Event that was sent. */ public synchronized void eventOccurred(Event aEvent) { LOG.info("Event '" + aEvent + "' sent."); + Thread current = Thread.currentThread(); List eventList = events.get(current); + if (eventList == null) { eventList = new ArrayList(); events.put(current, eventList); } + eventList.add(aEvent); } /** * Checks if a specific event has happened in a specific thread. - * + * * @param aThread * Thread to check. * @param aEvent @@ -89,15 +92,17 @@ public class EventTracker { */ public synchronized boolean isEventSent(Thread aThread, Event aEvent) { List eventList = events.get(aThread); + if (eventList == null) { return false; } + return eventList.contains(aEvent); } /** * Gets the events for a thread in the order they were sent - * + * * @param aThread * Thread to get events for. * @return Events that were sent. A zero-sized array is returned if no @@ -105,42 +110,49 @@ public class EventTracker { */ public synchronized List getEvents(Thread aThread) { List eventList = events.get(aThread); + if (eventList == null) { eventList = Collections.emptyList(); } + return Collections.unmodifiableList(eventList); } /** * Gets the number of times an event was sent summed up - * over all threads. - * + * over all threads. + * * @param aEvent * Event to check. * @return Number of times it was reached. */ public synchronized int getEventCount(Event aEvent) { int count = 0; + for (Thread thread : events.keySet()) { List eventList = events.get(thread); + for (Event event : eventList) { if (event.equals(aEvent)) { count++; } } } + return count; } - + /** - * Gets the total event count over all threads. + * Gets the total event count over all threads. * @return */ - public synchronized int getEventCount() { - int count = 0; - for (Thread thread: events.keySet()) { - count += events.get(thread).size(); - } - return count; + public synchronized int getEventCount() { + int count = 0; + + for (Thread thread : events.keySet()) { + count += events.get(thread).size(); + } + + return count; } }